[应用相关] MCU运行原理-寄存器访问

[复制链接]
951|7
 楼主| tfqi 发表于 2024-2-2 17:01 | 显示全部楼层 |阅读模式
如今,mcu应用在很多领域中,如车载平台、物联网、家电、工业控制等等,作为嵌入式软件开发人员,不仅要懂得如何使用mcu,更要只能mcu在运行时,硬件里面到底发生了什么,这样更利于在遇到问题时定位和分析问题;
以STM32为例,在软件中执行这些代码的时候,硬件里面会发生什么呢?

uint32t reg_addr;
volatile uint32t tmp;
int main() {
  reg_addr = 0x40013000;
  tmp = (uint32t *)reg_addr;
  return 0;
}
1 首先,编译器会将代码编译成对应的指令,存放在hex文件中;

2 hex会存放在flash中;

3 在上电时,硬件会将flash中的代码加载一部分到SRAM中;

4 加载完成之后,cpu开始取指令;(下图中的红色路径)

5 当cpu执行到第5行代码对应的指令时,通过System总线发起访问请求;

6 硬件仲裁结构将请求转到寄存器地址对应的SPI1模块;(下图中的红色路径)

7 SPI1模块返回寄存器数据,CPU完成寄存器读操作;

7281665bcaf5e24375.png
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/a752109494/article/details/135763678

tpgf 发表于 2024-4-8 11:25 | 显示全部楼层
直接调用库函数的话 不用太在意底层的操作了吧
heimaojingzhang 发表于 2024-4-8 12:40 | 显示全部楼层
有些寄存器是可读不可写入或者可读可写的 这个要注意一下
EmmaTT 发表于 2024-4-8 14:27 来自手机 | 显示全部楼层
可读不可写的寄存器是做什么用的
paotangsan 发表于 2024-4-8 19:46 | 显示全部楼层
所有外设模块的操作流程都是这样的吗
keaibukelian 发表于 2024-4-8 20:56 | 显示全部楼层
了解这个原理 有利于我们编程的时候避开错误操作区域
guanjiaer 发表于 2024-4-8 22:41 | 显示全部楼层
如何根据外在表现判定内部发生了什么问题呢
观海 发表于 2024-4-8 23:51 | 显示全部楼层
有米有办法在软件的运行过程中实现对寄存器的实时监控啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

3317

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部