提问做嵌入式系统开发的同志们一个问题,程序开始执行的地方是main()函数吗?大学里我的老师都是这么说的,程序的入口就是main函数还有很多参考书也这么说,于是乎在这种main来main去的日子里写着代码——有一天突然停下啦思考了一下,豁然开朗,原来所有芯片的入口地址是PC指针在上电后的第一个值,也就是——复位!
没想到这么多年被一些人和书给误导了,机器就是机器它总是有起始位置的,那个位置就是上电那一刻的复位。
为了帮助大家理解,下边我举几个例子,比如MSP430系列的单片机,复位后的PC地址一般是0xFF这是8位地址的,还有16位地址的0xFFFE;
32位地址的0xFFFFFFFC,这些是与地址相关系的所以大家可以通过思考更清楚一下复位地址与地址位数的关系;
通过复位后,要经过启动文件,启动文件一般使用汇编编写,通过一些设置堆栈和中断等最后引导至我们所说的main函数,NND绕了一大圈,害得他爷爷我思考了半个多世纪!MSP430F149的启动文件在IAR环境中可以看到lnk430f149.xcl引入到main函数的入口,philip的LPC21xx用的启动文件是Startup.s,stm32F10x系列的大家更熟悉了用到的是startup_stm32f10x_ld.s;startup_stm32f10x_md.s;startup_stm32f10x_hd.s中的一个。
好了这次先写到这里,领导这里走来走去的,一会还要开会——妈了个巴子的——就是没时间呀,苦逼的嵌入式开发!时间、时间、时间,不是道什么时候才有呀……
有前辈、高手或者嵌入式开发的爱好者可以加我的QQ:744148994,大家一起讨论,一起研究!
|