libpic30.a归档/库中包含两个C运行时启动模块。这两个启动模块的入口点都是__reset。链接描述文件在程序存储器的地址0存放了一条GOTO__reset指令,用于在器件复位时转移控制。
默认情况下链接主启动模块并进行以下操作:
1)使用链接器或用户定义链接描述文件提供的值对堆栈指针(W15)和堆栈指针限制寄存器(SPLIM)进行初始化。
2)如果定义了.const段,那么将通过初始化PSVPAG和CORCON寄存器将其映射到程序空间可视性(PSV)窗口。注意,当在MPLABIDE中选择了Constants in code space选项或在MPLAB C30命令行中指定了默认的-mconst-in-code选项时,将定义一个.const段。
3)读取.dinit段中的数据初始化模板,会导致所有未初始化的段被清零,同时所有已初始化段被初始化为从程序存储器中读取的值。数据初始化模板由链接器创建,并支持“代码段和数据段”中的标准段和用户定义段。
4)调用main函数时不带参数。(www.xing528.com)
5)如果从main函数返回,处理器将复位。
当指定-Wl、--no-data-init选项时,将链接备用启动模块(crt1.o)。crt1.o执行和主启动模块相同的操作,除了第3步,这一步省略掉。备用启动模块比主启动模块小,所以当不需要初始化数据时,可选择该模块以节省程序存储空间。
这两个模块的源代码(采用dsPIC汇编语言)存放在c:\pic30_tools\src目录中。如果需要,可以对启动模块进行修改。例如,如果应用需要在调用main函数时带参数,可通过改变条件汇编伪指令来提供这一支持。
注意:持久数据段.pbss不会被清零或初始化。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。