单片机中的代码是运行在FLASH中还是RAM中

序言

马上就要国庆了,今年是2019年,又是十年一次的大阅兵。时间过得真快,仿佛上次大阅兵还是昨天,原来十年是如此短暂。最近工作也确定了,估计以后就干工控嵌入式了,感谢这么多年来父母、祖国、老师、以及身边所有陪伴我一路走来的朋友们。

今天早上,我和往常一样打开电脑,开始看代码,我准备好好研究一下CM3的内核架构,在看完它的整体架构后,各个模块的作用,存储器映射我都大概了解了,我于是想看看,代码到底被放在了哪里,执行的时候,又是在哪里,于是我打开调试器开始观察,卧槽,我突然发现代码运行的地址和CM3给的SRAM地址不对应。后来上网搜了一下才发现原来单片机并不用把程序加载到RAM中。下面我将会详细介绍我的这次探索历程

CM3存储器映射

在这里插入图片描述
上面是CM3的存储器映射,一共分成了八段,其中SRAM段和Code段各占了512M,我本以为:代码永久存储在Code段中,运行的时候加载到SRAM段中。

STM32中的闪存

我用的是STM32F103RBT6,它是中容量,芯片内置的FLASH大小为128K,地址映射情况如下图所示
在这里插入图片描述
也就是说ST公司把CM3内核的0x0800 0000 - 0x0800 13FF这个部分的地址给了片上FLASH,这部分地址空间在0x0000 0000 - 0x1FFF FFFF上,代码将来就会永久地存储在这里。

注:这里ST公司对M3内核的地址进行了重映射,把0x0000 0000映射到了0x8000 0000

调试时候的现象

在这里插入图片描述
???,代码运行的时候就是在FLASH中,并没有被加载到SRAM中,震惊!!!

现象解释

首先,单片机中SRAM很小,STM32F10XX只有64K,普通PC机的RAM几个G,所以把程序加载到SRAM中,不太合适,再者,把程序加载到SRAM中会增加内存管理开销,除此之外,ARM采用哈弗结构,SRAM取数据,FLASH取指令,两者同时进行,效率杠杠的。当然,ST公司也给了我们选择,可以通过设置boot0和boot1引脚来决定从哪里启动程序。

综上,在单片机中,程序运行的时候,数据加载到了RAM中,代码仍然在FLASH中。

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值