打印
[资料分享]

嵌入式的入口地址非main而是——复位

[复制链接]
1296|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
haopijin|  楼主 | 2017-12-27 14:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
      提问做嵌入式系统开发的同志们一个问题,程序开始执行的地方是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,大家一起讨论,一起研究!


495f98ca3fbffb9fc91768b5.jpg (284.3 KB )

复位

复位

相关帖子

沙发
airwill| | 2017-12-27 21:11 | 只看该作者
没有必要纠结于这个概念. 复位以后有初始化代码是由编译器提供的. 所以我们的代码还是从 main() 开始的.
不过也真是这一点, 有些特别场合还是需要对初始化代码做些调整

使用特权

评论回复
板凳
star567| | 2017-12-28 16:27 | 只看该作者
程序跑之前,要准备一些东西,准备好啦,就开始从main开始,准备的那些东西,目前资历低,还没有怎么去研究,但是你也不用纠结

使用特权

评论回复
地板
gujiamao12345| | 2017-12-28 17:43 | 只看该作者
额...知道了然后可以干嘛

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝