X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
NXP MCU
[讨论] 嵌入式程序的入口不是main而是——复位
haopijin
2017-12-27 14:39
楼主
提问做嵌入式系统开发的同志们一个问题,程序开始执行的地方是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,大家一起讨论,一起研究!
点赞
回复评论 (7)
沙发
保安队大队长
广告做的挺好啊,我帮你修正一下:
嵌入式程序的入口不是main而是——复位中断向量
main只是C语言程序的入口,程序的入口肯定不是main,不管是不是嵌入式
点赞
2017-12-27 14:54
板凳
damiaa
复位中断向量地址
点赞
2017-12-27 14:58
4楼
wsmysyn
其实简单的8051在keil c51环境下,加入的startup.a51也是类似的功能,初始化了一些堆栈等操作,最后调用了main。当然也可以不要startup.a51,但可能会出现某些异常的问题。
查看汇编代码,一步一步运行也能看到,并不是一开始就调用main的。
实践出真知
坐而言不如起而行
点赞
2017-12-27 15:06
5楼
1071416541
如果是科普也沒有什麽,打廣告的話,需要把問題說清楚。
不管什麽程序都有入口地址的概念,這個才是程序的運行起點。
系統級的應用會被操作系統加載到入口地址處開始執行。
而沒有系統的MCU的軟件,入口地址受廠商的控制,ARM是從000H開始來執行的。
stm32的startup_stm32f10x_md.s文件寫的很清楚:
This module performs:
- Set the initial SP
- Set the initial PC == Reset_Handler //你指的是這個位置?
- Set the vector table entries with the exceptions ISR
- Branches to __main in the C library
点赞
2017-12-27 18:05
6楼
lehuijie
main函数是c语言定义的入口。
它只是人为取名的,你在BootLoader中把它命名改为a,b都可以。反正要进入c语言编写的程序都要有一个入口地址,这地址叫main则是大家公认的
点赞
2017-12-28 08:47
7楼
lxalixiaoyun
我理解的main函数相当于应用层的入口
点赞
2017-12-28 10:27
8楼
白丁
main是程序入口都是谭浩强教的吧,入口应该是启动文件,那个用汇编写的东西,可能一般都不关心
training
点赞
2017-12-28 21:22
最新活动
有奖直播报名中!抢占工业4.1先机,WT·世健科技日等你来!
2024 瑞萨电子MCU/MPU工业技术研讨会——深圳、上海站, 火热报名中
罗姆有奖直播 | 重点解析双极型晶体管的实用选型方法和使用方法
STM32N6终于要发布了,ST首款带有NPU的MCU到底怎么样,欢迎小伙们来STM32全球线上峰会寻找答案!
免费下载 | 安森美电动汽车充电白皮书,看碳化硅如何缓解“里程焦虑”!
是德科技有奖直播 | 应对未来高速算力芯片的设计与测试挑战
随便看看
做个家用带有温湿度测试仪的电子表,原理图、PCB在17楼,欢迎讨论
spartan 6 warning HDLCompiler:89
2007年大型贺岁片
windows是如何找到设备驱动的?
【R7F0C809】实现定时器中断
verilog_经验(适合初学者)
一款高精度测温电路设计程序
FPGA数字示波器
用vs2005 c#开发ppc程序是为什么汉字会变成方块
想做基于Wince的PDA的开发,请推荐几款?
高亮度LED在汽车照明应用的问题
模拟电路的频率响应
从昆腾plc中取数的问题,
VHDL 语言中GENERATE 用途是什么?
2004年秋季(第64届)全国电子展览会
要和各位说再见了
EEWORLD大学堂----ARM研发部门Fellow Rob Aitken博士讲解FinFET技术
时钟抖动测试-Ivan
STM32F105 USB OTG 硬件连接
MSP-EXP430FR5739
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复