当前位置:首页 > 单片机 > 单片机
[导读] 闲来无事,研究了下变量在MCU中存储位置ps:MCU中能存放数据的地方有三处:register、rom、ram涉及标准C关键字:register:定义和申请一个register级变量 auto::定义自动变量,缺省时为编译器

闲来无事,研究了下变量MCU中存储位置
ps:MCU中能存放数据的地方有三处:register、rom、ram

涉及标准C关键字:register:定义和申请一个register级变量
auto::定义自动变量,缺省时为编译器默认
const:定义常量

涉及IAR预定义: __no_init:说明变量不需初始化
section .text段:存放代码
section .rodata段:存放只读数据
section .noinit段:存放不需初始化数据
section .bss段:存放默认初始化数据
section .data段:存放已初始化数据
CSTACK段:栈
HEAP段:堆

//属性:宏变量
//位置:是在预编译期间被汇编进section .text段(一般放在rom里)
//操作:运行中已不存在
#definero_def 0x11111111UL

//属性:常量,只读变量
//位置:直接存在section .rodata段(一般放在rom里)
//操作:程序中访问时均是在section .rodata段中取(速度较慢)
const uint32_t ro_var = 0x22222222;

//属性:未初始化全局变量
//位置:是存在section .noinit: DATA段(一般放在ram里)
//操作:程序中访问时均是在section .noinit: DATA段中存取(速度较快)
__no_init uint32_t ni_global_var;

//属性:默认0初始化全局变量
//位置:是存在section .bss段(一般放在ram里)
//操作:启动时将bss段清零;程序中访问时均是在section .bss段中存取(速度较快)
uint32_t zi_global_var;

//属性:已初始化全局变量
//位置:初始化值存在section .data_init段(一般放在rom里),变量本身是存在section .data段(一般放在ram里)
//操作:启动时将初值从.data_init段复制到.data段;程序中访问时均是在section .data段中存取(速度较快)
uint32_t i_global_var = 0x33333333;

void test_variable(void)
{
//属性:已初始化寄存器变量
//位置:其初始化值存在section .text段(一般放在rom里),变量本身存在cpu的register里
//操作:如果申请成功,程序中访问时均是在cpu的register中存取(速度最快);如果申请失败,则是普通局部变量
registeruint32_t i_register_var = 0x44444444;

//属性:已初始化局部变量
//位置:其初始化值存在section .rodata段(一般放在rom里),变量本身存在CSTACK里(一般放在ram里)
//操作:定义时将初值从.rodata段复制到CSTACK中;程序中访问时均是在CSTACK段中存取(速度较快),一说局部变量入栈只是简单的移动SP指针,空出局部变量的位置而已.寻址是用SP的偏移量作为相对地址
uint32_t i_local_iArray[4] = {0x55555555, 0x66666666, 0x77777777, 0x88888888};

//属性:动态内存申请
//位置:赋值是存在section .text段, 申请的内存区是存在HEAP里(一般放在ram里)
//操作:程序中访问时均是在HEAP段中存取(速度较快)
uint32_t *zi_local_p;
p = (uint32_t *)malloc(4);
...
}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

本届年会将在上海(11月13-14日)、北京(11月19-20日)和深圳(11月27-28日)举行,面向嵌入式设计工程师推出25门技术课程

关键字: 嵌入式 MCU 模拟

中国北京(2025年9月2日)—— 业界领先的半导体器件供应商兆易创新GigaDevice(股票代码 603986)受邀出席2025智能汽车基础软件生态大会暨第四届中国汽车芯片大会,并与国内领先的AUTOSAR车用操作系...

关键字: 汽车电子 MCU 智能汽车

2025年8月26日,‌Elexcon深圳国际电子展‌在‌深圳会展中心(福田)1号馆‌(展台号:1L30)盛大举行。作为全球电子产业链的重要盛会,展会汇聚创新技术与行业解决方案。米尔电子MYIR携RZ系列核心板、开发板等...

关键字: 核心板 开发板 MCU

针对HMI应用所需的段码式LCD和电容式触控进行优化,为电磁炉提供精准控制;支持通过双区闪存实现便捷、安全的OTA

关键字: MCU 智能家电 电磁炉

聚焦工业4.0及能源管理应用对主控MCU的高性能需求,极海正式发布APM32F425/427系列高性能拓展型MCU,集合运算性能、ADC性能、Flash控制器性能与通信接口四大维度革新,进一步增强了EMC性能,重新定义C...

关键字: MCU 工业应用 极海

MarketsandMarkets预测,到2027年,全球嵌入式AI市场规模将超过200亿美元,年复合增长率高达30%。这一增长背后,是对高算力、低功耗、实时性和安全性的迫切需求,以及技术碎片化与跨界融合的复杂挑战。在这...

关键字: Renesas AI 瑞萨电子 嵌入式AI MCU MPU

在嵌入式系统中,Flash存储器因其非易失性、高密度和低成本特性,成为代码存储和关键数据保存的核心组件。然而,MCU驱动Flash读写时,开发者常因对硬件特性理解不足或操作流程疏忽,陷入性能下降、数据损坏甚至硬件损坏的陷...

关键字: MCU驱动 Flash

全新产品满足DLMS Suite2表计应用安全法规,提供丰富的通信选项、电容式触摸界面,以及支持软件更新的双区闪存

关键字: MCU 闪存 恒温器

由于边缘AI是指在边缘设备上部署和运行AI模型,而不是将数据传输到中央服务器进行处理。这种方式具有低延迟、高响应速度、保护隐私和降低数据传输成本等优势。微控制器(MCU)作为电子设备的主控制芯片,在边缘AI的发展中扮演着...

关键字: MCU AI
关闭