IAR下如何同时指定section的LMA和VMA

目的:

简要介绍IAR下如何同时指定section的LMA(加载地址,ROM)和VMA(运行地址,RAM)。

操作说明:

修改 icf文件,新增 my_test_section 、my_test_section_init 布局。

1, 使用编译器自动生成的拷贝方法:

icf文件修改前后对比:

通过这种方式可手动指定section的存放地址(如这里的ROM_region_2)和 运行地址 (如这里的RAM2_region_2)

测试代码示例:

cpp 复制代码
...

__attribute__(( section( "my_test_section"))) uint8_t test_arr[4] = {0x11, 0x22, 0x33, 0x44};

int main(void)
{
    ...
    
    for(uint8_t i = 0; i < 4; i++)
    {
      INFO("0x%X\n", test_arr[i]);
    }
    
    ...
}

2,使用手动拷贝:

icf文件修改前后对比:

cpp 复制代码
...

__attribute__(( section( "my_test_section"))) uint8_t test_arr[4] = {0x11, 0x22, 0x33, 0x44};

#pragma section = "my_test_section"
#pragma section = "my_test_section_init"

int main(void)
{
    ...
    
    // 从LMA拷贝到VMA
    memcpy((uint8_t*)__section_begin("my_test_section"), 
    (uint8_t*)__section_begin("my_test_section_init"), 
    __section_size("my_test_section_init"));
    
    for(uint8_t i = 0; i < 4; i++)
    {
      INFO("0x%X\n", test_arr[i]);
    }
    
    ...
}

原理解释:

《EWARM_DevelopmentGuide.ENU.pdf》

从上可知,默认情况下,在链接阶段,一个section(如这里的my_test_section)会被分成两个section来进行初始化,原名称的section(如这里的my_test_section)按照之前设定的初始化方式进行初始化,新创建一个section,名称为原名称+_init后缀(如这里的my_test_section_init)用来存放初始值,放在ROM区域。

如上针对运行在RAM上保存在ROM上的section才有意义,对于存放和使用都在ROM没有意义(如const 类型数据)。

前面的示例就是显式的指定了section同名+_init 的 section的存储布局来指定在ROM上存放位置的方式。

参考:

《EWARM_DevelopmentGuide.ENU.pdf》

相关推荐
irislinAmelia1 小时前
缺陷检测AI关键点在哪
人工智能·嵌入式硬件·1024程序员节
糖糖单片机设计2 小时前
基于 STM32 的植物生长环境监控系统
stm32·单片机·嵌入式硬件
创界工坊工作室2 小时前
56-基于STC89C52的智能声控饮水机设计
stm32·单片机·嵌入式硬件·51单片机·proteus
hkj88083 小时前
stm32 ADC DMA 循环模式配合双缓冲分块(Ping-Pong)
stm32·单片机·嵌入式硬件
POMAGTOR5 小时前
【磁吸式连接器选型工程解析:结构原理、应用场景与选型可靠性要点】
网络·嵌入式硬件
RFID科技的魅力6 小时前
2026 年 RFID 资产标签批量制作怎么做?RFID 标签打印机实操指南
运维·人工智能·嵌入式硬件·物联网
Lxx_Zw8 小时前
机器周期与共地:时钟基准和电压参考基准
stm32·单片机·嵌入式硬件
我叫洋洋9 小时前
用 Qoder(AI 编程助手)把 Cadence 16.6 从零配到能画板
人工智能·单片机·嵌入式硬件·电路·1024程序员节
深圳老胡11 小时前
STM32 开发中 Trae 内置模型怎么选:Seed、MiniMax、GLM、DeepSeek、Kimi、Qwen 全对比
笔记·stm32·单片机·嵌入式硬件·代码规范·1024程序员节
传感器与混合集成电路11 小时前
多计算节点怎么融合?全国产通用融合计算机三子卡架构与任务配置方法
嵌入式硬件·1024程序员节