深度讨论32复位及SystemInit函数在程序中的作用

在32应用中,我们复位一般有两种方式:1.按复位按键复位程序
2.拔动单片机上的跳冒完成32的复
在以上两种复位方式中,对芯片而言,其实都是引脚接收到一个跳变延信号后触发的程序而已。在keil自带的固件库中,我们可以看到一下程序:这里写图片描述这里是从库中截出的复位程序代码段。EXPORT定义了一个全局变量 Reset_Handler 。IMPORT表示引用了一个函数,这里引进的_main函数的作用是把我们平时写的主函数中的main函数起作用,将C程序与底层汇编程序连接起来,使程序发挥作用。而我们在刚开始学习的时候,经常会发现别人写的环境中,总有一个函数不知道什么意思:SystemInit()。我们看会图片中150行中引入了SystemInit这个函数,在下一行并调用了该函数,然而却没有申明,因此如果我们在写主程序时如果没有在main外面声明一个新的SystemInit函数,编译时程序将报错。这里写图片描述
由图所示写一个空的函数出来即可,目的就是为了骗过编译器不报错。注意此处的函数名不要打错,要和固件库里的函数名一样。
如果你在Keil中遇到这种错误:
..\OBJ\Template.axf: Error: L6218E: Undefined symbol assert_param (referred from misc.o).
就是说明你没有对SystemInit()函数定义,因此在任意的.c函数中对SystemInit()定义即可解决该问题,函数里可以为空。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/zrh565309720/article/details/81950905