微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 第七帖 自动生产的工程相关文件讲解

第七帖 自动生产的工程相关文件讲解

时间:10-02 整理:3721RD 点击:

我们建立工程之后,HEW会自动生成几个文件,此文讲解一下这几个文件,请注意注释
1、ncrt0.a30
此文件时系统生成的启动文件,单片机启动后的首先运行的代码在此文件中。
;********************************************************************
; C Compiler for R8C/Tiny, M16C/60,30,20,10
; Copyright(C) 1999(2000-2006). Renesas Technology Corp.
; and Renesas Solutions Corp., All rights reserved.
;
; ncrt0.a30 : Startup Program for R8C/Tiny
;      
; $Date: 2006/11/22 04:13:59 $
; $Revision: 1.1.4.1 $
;********************************************************************
;---------------------------------------------------------------------
; include files
;---------------------------------------------------------------------
  .list  OFF
  .include nc_define.inc     【启动文件自动包含另外两个自动生成的头文件】
  .include sect30.inc
  .list  ON
;===================================================
; Interrupt section start
;---------------------------------------------------------------------
  .insf  start,S,0
  .glb  start
  .section interrupt
start:
;---------------------------------------------------------------------
; after reset,this program will start   【单片机启动,程序从此处开始执行】
【如果用户上电就要IO口动作,请在此处添加汇编代码】
;---------------------------------------------------------------------
  ldc   #istack_top,isp  ;set istack pointer  【设置部分指针和CPU模式】
  mov.b  #02h,0ah
  mov.b  #00h,04h   ;set processer mode
  mov.b  #00h,0ah
.if __STACKSIZE__ != 0
  ldc   #0080h,flg
  ldc   #stack_top,sp  ;set stack pointer
.else
  ldc   #0000h,flg
.endif
  ldc   #data_SE_top,sb  ;set sb register
  ldintb  #__VECTOR_ADR__
;===================================================
; NEAR area initialize.    【关于小于64K区域的RAM的设置】
;---------------------------------------------------------------------
; bss zero clear
;---------------------------------------------------------------------
  N_BZERO  bss_SE_top,bss_SE
  N_BZERO  bss_SO_top,bss_SO
  N_BZERO  bss_NE_top,bss_NE
  N_BZERO  bss_NO_top,bss_NO
;---------------------------------------------------------------------
; initialize data section
;---------------------------------------------------------------------
  N_BCOPY  data_SEI_top,data_SE_top,data_SE
  N_BCOPY  data_SOI_top,data_SO_top,data_SO
  N_BCOPY  data_NEI_top,data_NE_top,data_NE
  N_BCOPY  data_NOI_top,data_NO_top,data_NO
;===================================================
; heap area initialize    【初始化堆】
;---------------------------------------------------------------------
.if __HEAPSIZE__ != 0
  .glb  __mnext
  .glb  __msize
  mov.w  #(heap_top&0FFFFH), __mnext
  mov.w  #(__HEAPSIZE__&0FFFFH), __msize
.endif
;===================================================
; Initialize standard I/O  【初始化标准IO】
;---------------------------------------------------------------------
.if __STANDARD_IO__ == 1
  .glb  __init
  .call  __init,G
  jsr.a  __init
.endif
;===================================================
; Call main() function   【进入用户主程序】
;---------------------------------------------------------------------
  ldc   #0h,fb    ; for debuger
  .glb  _main
  jsr.a  _main
;===================================================
; exit() function     【退出程序】
;---------------------------------------------------------------------
  .glb  _exit
  .glb  $exit
_exit:         ; End program
$exit:
  jmp   _exit
  .einsf
;===================================================
; dummy interrupt function    【虚中断】
;---------------------------------------------------------------------
  .glb  dummy_int
dummy_int:
  reit
  .end
;********************************************************************
; C Compiler for R8C/Tiny, M16C/60,30,20,10
; Copyright(C) 1999(2000-2006). Renesas Technology Corp.
; and Renesas Solutions Corp., All rights reserved.
;********************************************************************

2、nc_define.inc
关于部分RAM和ROM的地址分配的头文件
;------------------------------------------------------------------------
;                                                                       |
;   FILE        :nc_define.inc                                          |
;   DATE        :Mon, Sep 28, 2009                                      |
;   DESCRIPTION :interrupt program.                                     |
;   CPU GROUP   :1B                                                     |
;                                                                       |
;   This file is generated by Renesas Project Generator (Ver.4.17).     |
;                                                                       |
;------------------------------------------------------------------------
; Macro Symbol definition
__STANDARD_IO__    .equ 0 ; STANDARD I/O flag definition    【标准IO标志定义】
__HEAPSIZE__       .equ 080H ; HEEP SIZE definition【堆定义】
__STACKSIZE__      .equ 080H ; STACK SIZE definition【栈定义】
__ISTACKSIZE__     .equ 080H ; INTERRUPT STACK SIZE definition【中断堆栈大小定义】
__VECTOR_ADR__     .equ 0fedcH ; INTERRUPT VECTOR ADDRESS definition【中断向量起始地址】
__ROM_TOPADR__     .equ 0c900H ; ROM TOP ADDRESS definition 【用户程序开始地址】
注意:Fousb  仿真时用户程序开始地址必须     大于      0c900H                  
3、sect30.inc
section 定义
;********************************************************************
; C Compiler for R8C/Tiny, M16C/60,30,20,10
; Copyright(C) 1999(2000-2006). Renesas Technology Corp.
; and Renesas Solutions Corp., All rights reserved.
;
; sect30.inc : section definition for R8C/Tiny
;
; $Date: 2007/11/29 09:02:11 $
; $Revision: 1.1.14.1 $
;********************************************************************
;===================================================
;
;  Arrangement of section
;
;---------------------------------------------------------------------
; Near RAM data area    【小于64K的RAM地址空间设置】
;---------------------------------------------------------------------
; SBDATA area
  .section data_SE,DATA
  .org  400H
data_SE_top:
  .section bss_SE,DATA,ALIGN
bss_SE_top:
  .section data_SO,DATA
data_SO_top:
  .section bss_SO,DATA
bss_SO_top:
; SBDATA area definition
  .glb  __SB__
__SB__ .equ  data_SE_top
; near RAM area
  .section data_NE,DATA,ALIGN
data_NE_top:
  .section bss_NE,DATA,ALIGN
bss_NE_top:
  .section data_NO,DATA
data_NO_top:
  .section bss_NO,DATA
bss_NO_top:
;---------------------------------------------------------------------
; Stack area  【栈地址设置】
;---------------------------------------------------------------------
  .section istack,DATA,ALIGN
  .blkb  __ISTACKSIZE__
istack_top:
.if __STACKSIZE__ != 0
  .section stack,DATA,ALIGN
  .blkb  __STACKSIZE__
stack_top:
.endif
;---------------------------------------------------------------------
; heap section【堆地址设置】
;---------------------------------------------------------------------
.if __HEAPSIZE__ != 0
  .section heap,DATA
heap_top:
  .blkb  __HEAPSIZE__
.endif
;---------------------------------------------------------------------
; Near ROM data area  【小于64K的ROM地址设置】
;---------------------------------------------------------------------
  .section rom_NE,ROMDATA
  .org  __ROM_TOPADR__
rom_NE_top:
  .section rom_NO,ROMDATA
rom_NO_top:
;---------------------------------------------------------------------
; Initial data of 'data' section 【数据区】
;---------------------------------------------------------------------
  .section data_SEI,ROMDATA,ALIGN
data_SEI_top:
  .section data_SOI,ROMDATA
data_SOI_top:
  .section data_NEI,ROMDATA,ALIGN
data_NEI_top:

  .section data_NOI,ROMDATA
data_NOI_top:
;---------------------------------------------------------------------
; Switch Table Section
;---------------------------------------------------------------------
;  .section switch_table,ROMDATA
;switch_table_top:
;---------------------------------------------------------------------
; code area【代码区】
;---------------------------------------------------------------------
  .section program,CODE,ALIGN
  .section interrupt,CODE,ALIGN
;---------------------------------------------------------------------
; variable vector section
;---------------------------------------------------------------------
  .section vector,ROMDATA
  .org  __VECTOR_ADR__
.if 0                 【注意这里,如果有中断程序,这里一定要改成1】
  .lword dummy_int  ; vector  0
  .lword dummy_int  ; vector  1
  .lword dummy_int  ; vector  2
  .lword dummy_int  ; vector  3
  .lword dummy_int  ; vector  4
  .lword dummy_int  ; vector  5
  .lword dummy_int  ; vector  6
  .lword dummy_int  ; vector  7
  .lword dummy_int  ; vector  8
  .lword dummy_int  ; vector  9
  .lword dummy_int  ; vector 10
  .lword dummy_int  ; vector 11   【这些是中断向量】
  .lword dummy_int  ; vector 12
  .lword dummy_int  ; vector 13
  .lword dummy_int  ; vector 14
  .lword dummy_int  ; vector 15
  .lword dummy_int  ; vector 16
  .lword dummy_int  ; vector 17
  .lword dummy_int  ; vector 18
  .lword dummy_int  ; vector 19
  .lword dummy_int  ; vector 20
  .lword dummy_int  ; vector 21
  .lword dummy_int  ; vector 22
  .lword dummy_int  ; vector 23
  .lword dummy_int  ; vector 24
  .lword dummy_int  ; vector 25
  .lword dummy_int  ; vector 26
  .lword dummy_int  ; vector 27
  .lword dummy_int  ; vector 28
  .lword dummy_int  ; vector 29
  .lword dummy_int  ; vector 30
  .lword dummy_int  ; vector 31
  .lword dummy_int  ; vector 32
  .lword dummy_int  ; vector 33
  .lword dummy_int  ; vector 34
  .lword dummy_int  ; vector 35
  .lword dummy_int  ; vector 36
  .lword dummy_int  ; vector 37
  .lword dummy_int  ; vector 38
  .lword dummy_int  ; vector 39
  .lword dummy_int  ; vector 40
  .lword dummy_int  ; vector 41
  .lword dummy_int  ; vector 42
  .lword dummy_int  ; vector 43
  .lword  dummy_int  ; vector 44
  .lword dummy_int  ; vector 45
  .lword dummy_int  ; vector 46
  .lword dummy_int   ; vector 47
  .lword dummy_int   ; vector 48
  .lword dummy_int   ; vector 49
  .lword dummy_int   ; vector 50
  .lword dummy_int   ; vector 51
  .lword dummy_int   ; vector 52
  .lword dummy_int   ; vector 53
  .lword dummy_int   ; vector 54
  .lword dummy_int   ; vector 55
  .lword dummy_int   ; vector 56
  .lword dummy_int   ; vector 57
  .lword dummy_int   ; vector 58
  .lword dummy_int   ; vector 59
  .lword dummy_int   ; vector 60
  .lword dummy_int   ; vector 61
  .lword dummy_int   ; vector 62
  .lword dummy_int   ; vector 63
.endif
;---------------------------------------------------------------------
; fixed vector section【固定向量地址】
;---------------------------------------------------------------------  
  .section fvector,ROMDATA
  .org  0ffdcH
UDI:
  .lword  dummy_int
OVER_FLOW:
  .lword  dummy_int
BRKI:
  .lword  dummy_int
ADDRESS_MATCH:
  .lword  dummy_int
SINGLE_STEP:
  .lword  dummy_int
WDT:
  .lword  dummy_int
; reserved
  .lword  dummy_int
; reserved
  .lword  dummy_int
RESET:
  .lword  start
;===================================================
; ID code & Option function select register
;---------------------------------------------------------------------
; ID code check function
  .id "#FFFFFFFFFFFFFF"【用户加密的密码,不要忘记了,忘记密码,芯片就报废了】
; option function select register
  .ofsreg 0FFH
;---------------------------------------------------------------------
; far ROM data area
;---------------------------------------------------------------------
;
;  .section rom_FE,ROMDATA
;  .org  10000H
;
;  .section rom_FO,ROMDATA
;
;  .section data_FEI,ROMDATA,ALIGN
;data_FEI_top:
;
;  .section data_FOI,ROMDATA
;data_FOI_top:
;
;====================================================
; Initialize Macro declaration
;---------------------------------------------------------------------
N_BZERO .macro  TOP_ ,SECT_
  mov.b  #00H, R0L
  mov.w  #(TOP_ & 0FFFFH), A1
  mov.w  #sizeof SECT_ , R3
  sstr.b
  .endm
N_BCOPY .macro  FROM_,TO_,SECT_
  mov.w  #(FROM_ & 0FFFFH),A0
  mov.b  #(FROM_ >>16),R1H
  mov.w  #TO_ ,A1
  mov.w  #sizeof SECT_ , R3
  smovf.b
  .endm
;********************************************************************
; C Compiler for R8C/Tiny, M16C/60,30,20,10
; Copyright(C) 1999(2000-2006). Renesas Technology Corp.
; and Renesas Solutions Corp., All rights reserved.
;********************************************************************

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top