uTank-木头
每一个你不满意的现在,都有一个你没有努力的曾经。
07 2019 档案
Cortex-M3 在C中上报入栈的寄存器和各fault状态寄存器
摘要:因为在标准C语音中是不能获取SP指针的。因而,如果想通过C代码来获取入栈的寄存器值,需要配合一小段汇编代码来获取当前的SP值,然后再把这个SP值以参数形式传送给C代码,最后以指针的形式把栈中的各寄存器值输出,同时也可以输出一些想要的各种状态寄存器值。如下: Keil环境汇编封皮: C服务程序,输入为 阅读全文
posted @ 2019-07-31 16:01 uTank 阅读(1110) 评论(0) 推荐(1)
Cortex-M3 双堆栈指针(MSP&PSP)
摘要:【双堆栈指针(MSP&PSP)】 Cortex-M3内核中有两个堆栈指针(MSP & PSP),但任何时刻只能使用到其中一个。 复位后处于线程模式特权级,默认使用MSP。 通过SP访问到的是正在使用的那个指针,可以通过MSR/MRS指令访问指定的堆栈指针。 通过设置CONTROL寄存器的bit[1] 阅读全文
posted @ 2019-07-29 15:33 uTank 阅读(15115) 评论(0) 推荐(2)
Cortex-M3 异常返回值EXC_RETURN
摘要:【EXC_RETURN】 在进入异常服务程序后,硬件自动更新LR的值为特殊的EXC_RETURN。当程序从异常服务程序返回,把这个EXC_RETURN值送往PC时,就会启动处理器的异常中断返回序列。因为LR的值EXC_RETURN是由硬件自动设置的,所以只要没有特殊需求,就不要改动它。RETURN的 阅读全文
posted @ 2019-07-29 11:49 uTank 阅读(4232) 评论(0) 推荐(1)
Cortex-M3 异常中断响应与返回
摘要:【异常/中断响应】Cortex-M3的异常/中断响应序列包括: 入栈:把8个寄存器的值压入栈。 取向量:从向量表中找出对应的服务程序入口地址。 更新寄存器:更新堆栈指针SP,更新连接寄存器LR,更新程序计数器PC 【入栈】响应异常的第一个行动,就是自动保存现场的必要部分:依次把xPSR、PC、LR、 阅读全文
posted @ 2019-07-26 17:23 uTank 阅读(2882) 评论(0) 推荐(0)
Cortex-M3 操作模式与特权等级
摘要:Cortex-M3支持2个模式(Handler模式、线程模式)和2个特权等级(特权级、非特权级)。 当处理器处在线程模式时,既可以使用特权级,也可以使用非特权级。 当处理器处在Handler模式时,总是特权级的。 在复位后,处理器进入“线程模式+特权级”。 在“线程模式+非特权级(用户级)”下,禁止 阅读全文
posted @ 2019-07-26 11:31 uTank 阅读(5122) 评论(0) 推荐(0)
Cortex-M3 R0~R15寄存器组 & 特殊功能寄存器组
摘要:【R0~R15寄存器组】 Cortex-M3处理器拥有R0~R15的寄存器组,如: 【R0~R12通用寄存器】R0~R12都是32位通用寄存器,用于数据操作。其中: R0~R7为低组寄存器,所有的指令都可以访问。 R8~R12为高组寄存器,只有32位Thumb2指令和很少的16位Thumb指令能访问 阅读全文
posted @ 2019-07-24 15:20 uTank 阅读(12129) 评论(1) 推荐(3)