找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于Cortex-M4内核的一个小问题

查看数: 2459 | 评论数: 2 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-2-26 11:24

正文摘要:

本帖最后由 MNwcy 于 2021-2-27 11:13 编辑 在看Cortex-M4的资料,就是权威指南那本书的时候,看到了关于异常发生时的入栈叙述, 看到这里有点疑问了,我的疑问就是“为什么入栈保存的只有八个字的数据?”对 ...

回复

ID:474802 发表于 2021-3-7 23:39
自己挖的坑自己填!经过一番小研究有所收获,总结一下:
1.关于子函数调用和异常中断处理是两种不同的情况,子函数调用是一个明确的关系,比如说我程序执行到哪里会调用这个子函数都是已知的(编译期间就能确定的)。而异常和中断的出现位置是不可知的。
2.举个例子在A函数中调用了B函数,各个函数怎么执行的在编译期间就确定了,当A调用B时,此时内部寄存器中的数据在执行完B后A还要接着用,所以就把调用B时会被改变的寄存器入栈保存(当然还有LR寄存器,入栈后LR会自动更新)
3.中断和异常想来就来,所以并不确定是在那个位置跳转到异常处理部分的,所以当异常中断来后就会把所有的内部寄存器保存(这就是所谓的栈帧,所以栈帧的大小也是固定的,注意入栈是区分调用者寄存器和被调用者寄存器,入的栈不同)
进调试看下汇编就明白了。有说的不对的欢迎指正

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

ID:474802 发表于 2021-2-28 19:24

欢迎讨论

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表