MDK Keil编译中CODE-RO-RW-ZI Data -堆栈(全网最全解析)

程序的组成、存储与运行

1、CODE、RO、 RW、 ZI Data 域及堆栈空间

相信大家使用keil做单片机开发的时候,编译成功之后,会出现program size,像我这里就是Program Size: Code=10294 RO-data=8178 RW-data=60 ZI-data=3676 那这些变量的含义都是一些什么呢,他们在程序运行的时候都起什么作用呢?在这里插入图片描述这里我使用的是muc为STM32F407VET6。这里说明一点这些值的大小都是字节。以字节为单位。

1-1、Code

这个工程所需要的代码域,把工程所有的.c文件.h文件所需要的文件才会编译。同时 这个还与编译的优化等级有关系,编译器选择不同编译器生成的机器指令,这些内容被存储到 ROM 区,ROM就是MCU的flash。掉电不会丢失。
当在option中的c/c++选项之中选择编译优化等级
选择 level-0 时候对应的Program Size如下
在这里插入图片描述
在这里插入图片描述选择 level-1 时候对应的Program Size如下

在这里插入图片描述
在这里插入图片描述
可以看出来CODE变化比较明显,是因为编译器优化了很多工程所不需要的文件,甚至文件中没有调用的函数都可能会被优化,同时RO、RW、 ZI Data 都有相应的减少。 一般情况下我们选择的优化等级是level-1。

1-2、RO-data

Read Only data,即只读数据域,它指程序中用到的只读数据,这些数据被存储在ROM 区,因而程序不能修改其内容。C 语言中 const 关键字定义的变量就是典型的RO-data。只要是const修饰都纳入,不管是局部还是全局变量

const uint8_t buf[1024] = {
   1,1,1
### 杰理MDK解析方法概述 杰理MDK通常指的是基于ARM Cortex-M系列微控制器开发环境中的项目文件或配置。MDK全称为Keil MDK (Microcontroller Development Kit),是一种广泛应用于嵌入式系统的集成开发工具链,支持多种微控制器的编程与调试。 #### 工具准备 在开始解析之前,需确保安装有以下软件: - Keil MDK-ARM 开发套件[^1]。 - ST-LINK或其他兼容的硬件调试器(如果目标设备需要在线调试)。 #### 文件结构分析 杰理芯片项目的MDK工程主要由以下几个部分组成: - **UVPROJX/UVPROJ**: 这些是项目设置的核心文件,包含了编译选项、链接脚本路径以及源码管理信息等[^2]。 - **Source Files (.c, .h)**: 用户定义的功能实现代码及其头文件声明。 - **Startup File**: 启动文件一般命名为`startup_<device>.s`或者`.S`,它负责初始化堆栈指针并跳转到主函数入口处执行用户程序逻辑[^3]。 #### 配置项解读 当打开一个已有的杰理MCU MDK工程项目时,可以按照如下方面来理解其内部机制: ##### 编译器设定 通过菜单栏Project -> Options for Target 'Target 1' 可访问整个构建流程的关键参数调整界面。这里包括但不限于C/C++语言标准版本指定、优化级别控制(-O0至-O3)[^4]。 ##### 中断向量表映射 对于任何一款单片机而言,中断处理都是不可或缺的一部分。查看位于Linker标签页下的Use Memory Layout from Target对话框内的Scatter Loading描述符(.sct/.icf),能够得知各段内存区域如何分配给不同的数据类型(ROM只读区存放常数表格;RAM可写空间存储变量值变化情况等等)[^5]。 以下是简单的散列加载示例代码片段用于说明目的而非实际操作指南: ```scatter LR_IROM1 0x08000000 0x00080000 { ; load region size_region ER_IROM1 0x08000000 0x00080000 { ; execution region RO code *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x20000000 0x00020000 { ; RW data .ANY (+RW +ZI) } } ``` ##### 外设驱动注册 针对具体型号的外设功能启用状态可以在Device Configuration Framework里快速定位对应寄存器位域含义解释文档链接地址[^6]。同时注意某些特殊情况下可能还需要额外手动编写底层接口封装层以便更好地适配高层应用需求场景切换灵活度提升用户体验满意度水平达到预期效果为止结束本次讨论环节谢谢大家!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值