![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Cortex-M
文章平均质量分 92
顶点元
你当像鸟飞往你的山!
展开
-
STM32 MAP文件结合固件文件分析
MAP 文件分析可以参考之前的文章程序代码在未运行时在存储器空间内称为加载域,在运行时在存储器空间内称为运行域。在这里我们根据加载域的描述可以知道加载域的空间结束位置应该为0x08020000+0x00010978=0x08030978的位置。从下面的固件我们可以知道固件的实际结束位置应该是0x080305E8。这里的俩个位置并不一致是什么原因呢?我们继续往下逐步分析。上图内容的最后一行:结束地址为0x080304e0+0x20=0x08030500,和第一行中的描述一致。根据类型和属性可以知道这一部分原创 2024-05-24 20:14:31 · 1052 阅读 · 0 评论 -
Keil MDK map文件学习笔记
从flash的0x08030500位置开始加载数据,加载大小为0x000069b0大小的数据到RAM空间(上图最后一行0x200049b0+0x2000=0x200069b0)。这里要注意的是并非直接从0x08030500直接向后复制0x000069b0大小的数据到RAM中,实际是根据FLASH空间中的0x08030500后面的部分数据和之前的分散加载表等内容在RAM中生成的0x69b0空间。上面两个红框中的内容分别对应于全局函数和全局变量,并显示了所在执行域空间的位置和大小。原创 2024-05-24 15:52:17 · 896 阅读 · 0 评论 -
基于STM32看Cotex-M内核中断向量表重定向
正常的执行过程为,启动时先执行Boot程序中的Reset_Handler函数然后经过分散加载,初始化堆栈,初始化C库后跳转到用户main函数执行,其中监测到不许要升级则通过跳转函数(设置主栈指针,将App中Reset_Handler函数的地址作为执行地址)跳转到App程序中的Reset_Handler函数,然后再经过分散加载,初始化堆栈,初始化C库等操作后跳转到用户main函数中执行,在main函数开始位置首先要修改VTOR的值,则后续的中断触发都会跳转到App代码中对应的中断服务函数中。原创 2024-05-24 13:25:54 · 996 阅读 · 0 评论