请问STM32F0运行在什么模式下?后面会不会切换到ARM模式?

2019-07-18 17:20发布

查看编译出来的二进制文件,第一个双字是栈地址,第二个双字最低位值为1,说明程序运行后CPU处在Thumb模式。
我的问题是后面会不会切换到ARM模式?切换的话堆栈是怎么切换的(MSP/PSP)?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
youpukeji668
1楼-- · 2019-07-18 18:49
stm32没有arm模式
dang28
2楼-- · 2019-07-19 00:11
 精彩回答 2  元偷偷看……
毛毛lallala
3楼-- · 2019-07-19 02:09
不会切换到ARM模式,只支持Thumb模式,你可以改下reset函数的地址强制切到ARM模式,应该会出现hardfault
dang28
4楼-- · 2019-07-19 02:34
毛毛lallala 发表于 2019-6-17 10:47
不会切换到ARM模式,只支持Thumb模式,你可以改下reset函数的地址强制切到ARM模式,应该会出现hardfault

仿真器调试的时候,PC值LSB位值是0,应该是ARM模式吧?
毛毛lallala
5楼-- · 2019-07-19 04:49
dang28 发表于 2019-6-17 10:53
仿真器调试的时候,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模式。
dang28
6楼-- · 2019-07-19 08:36
毛毛lallala 发表于 2019-6-17 11:10
本帖最后由 andeyqi 于 2018-7-10 09:16 编辑

不是,PC的值LSB位是0是正常的PC是两字节对齐的,你可以看下跳转函数的地址,这个地址的LSB应该是1,PC跳转的时候回把这个1屏蔽掉。也就是说函数的地址LSB是还是0,只是跳转的时候THUMB模式会吧对应地址的LSB置1来区分是thumb还是arm模式。 ...

我记得区分ARM还是Thumb就是依靠PC的LSB,0是ARM模式,1是Thumb。而且设置堆栈设置的就是MSP,而不是PSP,应该是ARM模式吧。
大神有没有什么资料我可以去看下?

一周热门 更多>