| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 嵌入式 - 代码看加载【1】IDE 生成的代码大小 -> 正文阅读 |
|
[嵌入式]嵌入式 - 代码看加载【1】IDE 生成的代码大小 |
引言这篇文章介绍了 keil 工程生成代码的各中 data 的介绍,以及在地址空间中的存放差异。 依旧是【固件防复制系列】的衍射知识总结,在真正讨论程序加载以及堆栈的分配及使用问题前,先以 keil 为实践 IDE 对象来简单描述下代码生成后,各种数据的放置空间,以及若存在空间不足情况下,代码的简单体积缩减。 生成数据区分各数据含义
这里我们可以看到:
这里的数值,单位均为字节 Byte。 先分别来说下,各部分的含义:
关于其放置位置,也是根据 MCU 存储介质的性质以及本身的操作类型来决定的,我们知道 MCU 的闪存或 Flash 空间其属于 ROM 存储器,适合存放只读或初始化值非 0 的数据,而 RAM 则适合存放反复修改的数据类型。 则会有下面的分配:
为什么 RW 数据有两份?RW 我们知道是初始化且非 0 的全局变量,也就是说相当于我们看书,看到了某个进度,需要下次再看,这里就需要记录一下进度。 相应的, ZI-data 放在了 RAM 区,因为其是未初始化或者初始化值为 0 的变量,则不用占用闪存空间(相当于,知道是新书,也不用记录这次看到哪了,拿起来看就完了),运行中进行默认初始化为 0 . 注:关于加载的知识,详细请见《程序员的自我修养》,具体版本请见参考资料章节。 如何缩减空间在嵌入式开发领域中,嵌入式资源是宝贵的,不免会遇到代码体积过大或需要进行优化的情况,单单从代码体积来看,可以如何缩小占用空间。 想要有的放矢的缩减尺寸,需要了解哪些数据属于 RO, RW 和 ZI。 闪存空间
RAM 空间这里的 RAM 一定程度上可以理解为运行时用的空间,涉及到动态建立、修改和访问的数据及数据结构都会放置于这里,比如一些任务控制块、堆栈等。 简化这部分的使用大小:
如我在代码中注释掉了僵尸代码,一个在源文件中申明的全局数组(外部源文件没有引用):
我们可以看到,这个数据为 64 长的 32 字节元素长度的数组,计算下来就需要 256 字节长度的 RAM 空间,这里注释掉后,再次编译: 这里我们对比图1,发现 ZI-data 的大小减少了 44140-43884=256 Byte,也就是我们刚才注释掉的数组大小。 FreeRTOS 堆空间简述这里简单提一下,如果包含了操作系统的话,比我们产品中使用的是 FreeRTOS,其是在 RAM 区申请了一个较大空间的数组,也就是连续存储空间以作为其本身资源的消耗及管理,这部分是计算在 ZI-data 空间内的,具体大小查看宏定义,比如 v10.0.1 版本的 FreeRTOS 系统堆空间为 15M:
结合图 3、4 我们可知,不同的内存管理策略,都是在 15MB 堆空间大小的前提下,至于不同的内存管理策略具体有什么不同,请参考 FreeRTOS 官网手册: Memory Management; 根据自身开发需求来选定策略。 参考资料
|
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 6:28:31- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |