完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
查看编译出来的二进制文件,第一个双字是栈地址,第二个双字最低位值为1,说明程序运行后CPU处在Thumb模式。
我的问题是后面会不会切换到ARM模式?切换的话堆栈是怎么切换的(MSP/PSP)? |
|
相关推荐
9个回答
|
|
|
stm32没有arm模式
|
|
|
|
|
|
|
|
|
|
|
|
不会切换到ARM模式,只支持Thumb模式,你可以改下reset函数的地址强制切到ARM模式,应该会出现hardfault
|
|
|
|
|
|
仿真器调试的时候,PC值LSB位值是0,应该是ARM模式吧? |
|
|
|
|
|
本帖最后由 andeyqi 于 2018-7-10 09:16 编辑 不是,PC的值LSB位是0是正常的PC是两字节对齐的,你可以看下跳转函数的地址,这个地址的LSB应该是1,PC跳转的时候回把这个1屏蔽掉。也就是说函数的地址LSB是还是0,只是跳转的时候THUMB模式会吧对应地址的LSB置1来区分是thumb还是arm模式。 |
|
|
|
|
毛毛lallala 发表于 2019-6-17 11:10 我记得区分ARM还是Thumb就是依靠PC的LSB,0是ARM模式,1是Thumb。而且设置堆栈设置的就是MSP,而不是PSP,应该是ARM模式吧。 大神有没有什么资料我可以去看下? |
|
|
|
|
毛毛lallala 发表于 2019-6-17 11:10 刚看了下,LR里的LSB是1。 但是HardFault里判断MSP和PSP的代码是(LR&4)。不知道该怎么理解。 |
|
|
|
|
|
可能不知道你的应用场景,这个判断PSP还是MSP的方法我也没有理解,我理解的一般在逻辑程序下,一般使用的都是MSP,并没有使用PSP,PSP的使用一般是在有系统的情况下使用的,在任务调度的情况下将任务栈的地址赋给PSP,中断中使用的是MSP。以上只是个人的理解,理解的也不够深,呵呵~~ |
|
|
|
|
毛毛lallala 发表于 2019-6-17 11:42 嗯,谢谢你。我准备看下ARM Cortex-M0相关资料作进一步了解。 |
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
2810 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
2420 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2288 浏览 0 评论
2404 浏览 1 评论
1643 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 06:27 , Processed in 0.979209 second(s), Total 86, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1739