硬汉嵌入式论坛

 找回密码
 立即注册
查看: 46|回复: 5
收起左侧

[IAR] IAR8.40如何将数据存放在flash上

[复制链接]

3

主题

7

回帖

16

积分

新手上路

积分
16
发表于 5 小时前 | 显示全部楼层 |阅读模式
有一个静态全局结构体变量,想将它放在flash的某个固定地址上。

变量定义如下:

__attribute__((section(".my_data")))
static my_struct_t temp_data  = 0xAA;


icf文件如下:

/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x08000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x08008000;
define symbol __ICFEDIT_region_ROM_end__   = 0x0807FFFF;
define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__   = 0x2001FFFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x400;
define symbol __ICFEDIT_size_heap__   = 0x200;
/**** End of ICF editor section. ###ICF###*/


define memory mem with size = 4G;
define region ROM_region      = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region      = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];
define region MY_region       = mem:[from 0x08007000  to 0x08008000];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };
define block MY_DATA   with alignment = 4 {section .my_data};
initialize by copy { readwrite };
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };

place in ROM_region   { readonly };
place in RAM_region   { readwrite,
                        block CSTACK, block HEAP };
place in MY_region   { block MY_DATA  };


生成的map文件中,temp_data 显示在0x800'7000的位置,但是hex文件中0x800'7000的地址没有数据。请问是什么原因?感觉还是我的icf写的有问题
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
118335
QQ
发表于 3 小时前 | 显示全部楼层
IAR的话,不设置ICF

直接  #pragma location=地址, 试试
回复

使用道具 举报

3

主题

7

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 3 小时前 | 显示全部楼层
改成这样还是不行。。
#pragma location = 0x08008000
static my_struct_t temp_data  = 0xAA;
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
118335
QQ
发表于 3 小时前 | 显示全部楼层
fenglang 发表于 2025-9-26 17:16
改成这样还是不行。。
#pragma location = 0x08008000
static my_struct_t temp_data  = 0xAA;

#pragma location = 0x08008000
const my_struct_t temp_data  = 0xAA;
回复

使用道具 举报

3

主题

7

回帖

16

积分

新手上路

积分
16
 楼主| 发表于 3 小时前 | 显示全部楼层
这个变量只能是const的才行吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
118335
QQ
发表于 2 小时前 | 显示全部楼层
fenglang 发表于 2025-9-26 17:31
这个变量只能是const的才行吗?

内部Flash使用,要加的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-9-26 20:43 , Processed in 0.041030 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表