示例启动代码;;;;;用于dsPIC30 C编译器的C运行时启动模块;;(c)版权200220042007微芯片技术,保留所有权利;;;;主版本,具有数据初始化支持;;;当选择--data-init;;选项时,链接器加载此版本;;;;参见文件crt1。s用于备用版本,而不支持;;数据初始化。;;;;Entry_reset在设备重置时进行控制;;执行以下操作:;;;1。初始化堆栈和堆栈极限寄存器;2。初始化PSV窗口,如果y-常数长度>0;3。处理数据初始化模板;4。在链接器脚本中的特定地址调用用户的_main入口点;;;分配给..init,这可以被分配;;;;;;默认情况下支持main()的零参数形式;;如果定义了符号_u ARGV,则支持main()的两参数形式;;;;;取消注释以下行以定义符号_u ARGV:;.equiv_u ARGV,1;.equ_30F2010,1.include"p30f2010.inc"..init,code..u resetPR。ififdef_C30ELF.I_C30ELF.type_uC30ELF.type_resetPRI,@function_endif_endif_resetPRI,@function.ififififififIF_C30ELF.type_C30FI_resetFI_resetPRI_resetPRI,@function_C30ELF_resetPRI_resetPRI_resetPRI_resetPRI._resetPRI,@function_reseuuu_reseuu_resetifififififififififififififififififfffffFFFFFIIIIIIIIIIFFFFFFIIIIIIIIIIffffff0._reset:不返还处理器);;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; u_psv_ini;u_data_ini; u_data_ini;u_data_ini;\u init;;;;;;u_psv_init;u_init;u_data_init;u init;u data_init;u init_init;u init_init;u init;u init;u_init;u init;u init;u_init;;u_init_init;u init;;;;;;ARGV rcall_main;调用双参数main()setup.else call_main;调用用户的main().endif.pword 0xDA4000;停止模拟器重置;重置处理器。
以上来自于百度翻译
以下为原文
Sample start up code.
;;
;; C Run-time startup module for dsPIC30 C compiler.
;; (c) Copyright 2002,2004,2007 Microchip Technology, All rights reserved
;;
;; Primary version, with data initialization support.
;; The linker loads this version when the --data-init
;; option is selected.
;;
;; See file crt1.s for the alternate version without
;; data initialization support.
;;
;; Entry __reset takes control at device reset and
;; performs the following:
;;
;; 1. initialize stack and stack limit register
;; 2. initialize PSV window if __const_length > 0
;; 3. process the data initialization template
;; 4. call the user's _main entry point
;;
;; Assigned to section .init, which may be allocated
;; at a specific address in linker scripts.
;;
;; Supports the zero-parameter form of main() by default.
;; If the symbol __ARGV is defined, supports the two-parameter
;; form of main().
;;
;; Un-comment the following line to define symbol __ARGV:
;; .equiv __ARGV,1
;;
.equ __30F2010, 1
.include "p30f2010.inc"
.section .init,code
.global __resetPRI
.ifdef __C30ELF
.type __resetPRI,@function
.endif
__resetPRI:
.weak __reset
.ifdef __C30ELF
.type __reset,@function
.endif
__reset:
;;
;; Initialize stack, PSV, and data
;;
;; registers used: w0
;;
;; Inputs (defined by user or linker):
;; __SP_init
;; __SPLIM_init
;;
;; Outputs:
;; (does not return - resets the processor)
;;
;; Calls:
;; __psv_init
;; __data_init
;; _main or __main
;;
mov #__SP_init,w15 ; initialize w15
mov #__SPLIM_init,w0 ;
mov w0,_SPLIM ; initialize SPLIM
nop ; wait 1 cycle
rcall __psv_init ; initialize PSV
rcall __data_init ; initialize data
; clears w0, so ARGC = 0
.ifdef __ARGV
rcall __main ; call two-parameter main() setup
.else
call _main ; call user's main()
.endif
.pword 0xDA4000 ; halt the simulator
reset ; reset the processor
.end