这篇文章是搜集了许多的帖子和资料,按照本人的理解写出来的。在文章末尾会将参考的帖子和资料标明,如果有什么错误和表达不当,希望读者能够指出。
简介:从内存角度,搞清楚C代码是怎样作用于单片机的。
问题:
- 了解单片机的内存,众所周知单片机是取指执行,那么单片机从哪里取指的?所执行的数据又放在在哪里?
- C代码是以什么样的形式进入到单片机内存中的?进入到了单片机内存的哪个位置?
- 从C编译器到单片机的执行,程序经历了怎样的变化。
- 在执行的过程中,内存中有怎样的变化?
目录
单片机内的存储区域
不同的MCU的内核不同,所对应的RAM和ROM区域也不相同,存放代码和数据的方式也有所区别。在这里仅以Cortex-M4的参考手册为例,简单介绍一下单片机内部的存储机制。
下图是Cortex-M4内核的地址映射,注意到图中标红的Code和SRAM两个区域。这两个区域是单片机下载代码和数据后存放的位置。
Code以0x00000000开始的一片ROM(FLASH)区域,SRAM是以0x20000000开始的一片RAM区域,SRAM的读取速度相比于Code更快,用来保留堆栈和数据,保证CPU的执行效率。
这里要注意,Code是从0x00000000开始,但是我们的代码是从0x08000000开始,因为前面由厂家配置,boot程序之类的东西。