keil5 memory窗口内容解读

存储器窗口可以查看固定基地址上的值,在Address栏上输入0x40023000时memory界面如下图所示。单片机中每个存储单元的大小是一个字节,一个字节是两位十六进制数,所以地址0x40023000的值就是0xEF,地址0x40023003的值就是0x2E。

### Keil Memory窗口中Data和Code的区别及用途 #### 1. **Code区** Code区通常用于存储程序指令,即CPU执行的操作码。这部分内存是只读的,在大多数嵌入式系统中由ROM或Flash实现。 - **特点**: Code区的内容在编译时已经固定,无法在运行时修改。 - **功能**: 存储程序代码及其常量数据(如字符串字面量)。这些数据被称为RO-data(Read-Only data),它们不会改变并被放置在Code区内存中[^2]。 - **访问方式**: CPU通过取指操作从Code区加载指令到寄存器中执行。 例如,在Keil MDK中,`c:0`表示从地址0开始的Code区内容,开发者可以通过Memory Window观察该区域内存储的具体机器码[^1]。 ```c const char message[] = "Hello"; // 此字符串会被放入RO-data区域 ``` --- #### 2. **Data区** Data区主要用于存储可变的数据,分为多个子区域: - **DATA区**: - 数据位于内部RAM中,适合频繁访问的小型变量。 - 编译器自动初始化此区域内的全局/静态变量为预设值。 - 访问速度快,但由于容量有限,需谨慎使用。 - **IDATA区**: - 同样映射至内部RAM,但支持更大的寻址范围(最多可达256字节)。 - 需要额外的间接寻址指令来访问,因此速度稍慢于DATA区[^3]。 - **XDATA区**: - 对应外部扩展RAM,适用于大容量数据存储需求。 - 访问较慢,因为涉及多周期总线传输。 - **ZI-data区**: - ZI-data代表零初始化数据(Zero-initialized data),包括未显式赋初值的全局/静态变量以及栈和堆空间。 - 执行前由启动代码清零处理[^4]。 在Memory Window中,`d:0`, `i:0`, 和 `x:0`分别对应上述不同类型的Data区起点地址,允许用户实时监控其当前状态变化情况。 --- ### 总结对比表 | 特性 | Code区 | Data区 | |--------------|----------------------------------|-----------------------------------| | **位置** | ROM / Flash | RAM | | **内容** | 程序指令、常量 | 可变数据 | | **特性** | 不可更改 | 动态更新 | | **典型应用** | 函数体、字符串常量 | 局部变量、全局变量 | --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值