一般 MCU 包含的存储空间有:片内 Flash 与片内 RAM,RAM 相当于内存,Flash 相当于硬盘。编译器会将一个程序分为好几个部分,分别存储在 MCU 不同的存储区。
ROM:即单片机的FLASH,只读存储器
RAM:随机存储器
Keil 工程在编译完之后,会有相应的程序所占用的空间提示信息,如下所示:
Program Size: Code=87556 RO-data=35944 RW-data=4036 ZI-data=61316
除以1024就是KB大小,如87556=85.50KB
上面提到的 Program Size 包含以下几个部分:
编译完工程会在 _build
文件夹里生成一个 .map
的文件,该文件说明了各个函数占用的尺寸和地址,在文件的最后几行也说明了上面几个字段的关系:
Total RO Size (Code + RO Data) 123500 ( 120.61kB)
Total RW Size (RW Data + ZI Data) 65352 ( 63.82kB)
Total ROM Size (Code + RO Data + RW Data) 123812 ( 120.91kB)
程序运行之前,需要有文件实体被烧录到 STM32 的 Flash 中,一般是 bin 或者 hex 文件,该被烧录文件称为可执行映像文件。如下面左图中所示,是可执行映像文件烧录到 STM32 后的内存分布,它包含 RO 段和 RW 段两个部分:其中 RO 段中保存了 Code、RO-data 的数据,RW 段保存了 RW-data 的数据,由于 ZI-data 都是 0,所以未包含在映像文件中。
STM32 在上电启动之后默认从 Flash 启动,启动之后会将 RW 段中的 RW-data(初始化的全局变量)搬运到 RAM 中,但不会搬运 RO 段,即 CPU 的执行代码从 Flash 中读取,另外根据编译器给出的 ZI 地址和大小分配出 ZI 段,并将这块 RAM 区域清零,如下图所示;其余RAM空间作为动态内存堆使用。
? 由 Leung 写于 2021 年 4 月 8 日
1 . 目标 演示下图的git reset 各选项的效果。 2. Git Reset操作说明 图中说明:...
3月22日消息 外媒 Winfuture 报道,此前微软面向 Insider 预览用户公布了 Window...
本文实例讲述了正则表达式中的操作符及说明。分享给大家供大家参考,具体如下: ...
从另一台机器上复制过来的项目,由于两台机器的库目录不一致,导致了stdio.h等很...
橡皮擦一个逗趣的互联网高级网虫。 观前提醒本篇文章涉及知识点巨大建议先收藏再...
ajax 实现三级联动,相当于写了一个小插件,用的时候直接拿过来用就可以了,这里...
2月23日消息 据外媒 Windows Latest 今日报道,借助 Windows 10 Sun Valley 更新...
这些日子一直在简书上使用markdown写作,已经渐渐的痴迷于这种简洁纯粹的写作方...
Go原生就支持连接数据库,所以在使用 Golang 开发时,当需要数据库交互时,即可...
Greediness(贪婪型):最大匹配 X、X*、X+、X{n,} 是最大匹配。例如你要用 “....