日期:2023-05-26 14:01:01 来源:面包芯语
前面写了一篇 STM32的完整启动流程分析,但是感觉有些地方没有完全理明白,因此对不清楚的地方又做了一些总结。
CPU上电启动后被设计为去地址0x00000000位置处读取代码;首先会连续读取两个字,分别是栈指针初始值和复位异常处理函数的地址;然后跳去执行复位异常处理函数。
当然在一些早期的ARM处理器设计中,如Arm7TDMI,复位后会直接读取0地址处的代码进行执行,由软件初始化栈指针,0地址处存放的直接就是中断处理函数,而不是函数地址。所以我们可以有理由推测出,第一个字是栈地址是因为接下来的复位中断处理函数涉及函数跳转,可能已经需要存放内容在栈里了。
【资料图】
答案是都可以。这其实取决于用户的代码是存放在哪里的。
比如说对于一些性能强的MCU(如Cortex-A系列)来说,代码本身体积比较大,存放在SD卡里或者QSPI/SPI Flash里都有可能,这些MCU启动一定是先去bootROM执行代码,因为SD卡、SPI Flash的储存不在MCU的统一编址空间里,没初始化这些外设前根本无法访问,bootROM这块Nor Flash就一定是可以被MCU直接通过总线地址访问的,0地址的代码位于bootROM中。代码从bootROM中起来后,通过启动引脚判断从哪个外设中搬用户程序,并去初始化相应外设,将外设中存储的用户代码搬到内部SRAM中执行。后续的启动流程不赘述。
对于一些小容量的MCU来说,比如Cortex-M3/M4,他们的芯片里有内置Flash,这个Flash的特点跟上面说的bootROM很像,是MCU可以直接通过地址总线去访问到的,不需要进行外设初始化的。当然,这些MCU内部也是有bootROM的,因此这些MCU一上电可以选择从bootROM中启动,也可以选择从内置Flash中启动,是通过外部引脚进行选择的,选择了谁,就把谁的起始地址映射到0地址处。
这一点实际是通过编译的链接文件制定的。比如说如下是我截取的IAR的链接文件.icf。
M7内核芯片比较灵活了,改变了固定从0x0000 0000地址读取中断向量表的问题,以STM32H7为例,可以从 0x0000 0000 到 0x3FFF 0000 所有地址进行启动。专门安排了个选项字节来配置。
定期以通俗易懂的方式分享嵌入式知识,关注公众号,加星标,每天进步一点点。
声明:
本号原创、转载的文章、图片等版权归原作者所有,如有侵权,请联系删除。
标签:
上一篇: 英菲克i9八核线刷教程_英菲克i9八核刷机教程 动态
下一篇: 最后一页
深入理解MCU启动原理-视点
英菲克i9八核线刷教程_英菲克i9八核刷机教程 动态
怎么判断鸡蛋和黄瓜可以一起吃
强劲正青春!在宁波舟山港聆听中国经济心跳声|高质量发展调研行·浙江站
这一次,“晚节不保”的唐国强,怕要为33年前的选择买单了
相交线与平行线_相交线 天天速读
美联储6月加息与否概率如同“抛硬币”
新资讯:联想拯救者_联想G460ALITHA
环球看热讯:飞机驾驶室有监控吗_飞机驾驶室
【报资讯】许嵩睡粉后续?王一博的瓜?王鹤棣虞书欣二搭?吴宣仪挣了一个亿?邢昭林带新人?
每日信息:发油和发泥的区别(发油)
与神同行3最终审判上映时间_与神同行3什么时候上映|世界时讯
交易员再次完全消化了美联储将再次加息的预期 环球热头条
焦点滚动:超级台风“玛娃”登陆美国关岛北部 造成大面积停电;
有什么半成品加工项目适合做 (几个农村常见的半成品加工项目)
塘笔画_堂笔画|世界快讯
今日黄金期货价格实时行情(2023年5月25日)
环球观速讯丨安阳市举行2023年防汛会商研判桌面推演
思哲睿6月1日上交所首发上会 拟募资20.3亿元
热搜第一!专家:“二阳”不要带病上班!网友:不是我不想……
世界观热点:泰嘉股份05月25日涨停分析
快讯鸿日达涨停 报于15.84元
“拜物名媛”章小蕙复制董洁“慢直播”模式 小红书首秀热度达6亿-环球要闻
中国田径协会D级教练员 中国田径协会|环球速看
广物控股集团10亿元超短期融资券将于6月1日兑付 利率2.3%-环球速讯