硬汉嵌入式论坛

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

[IAR] IAR设置特殊数据数值在ROM而运行时加载到RAM的方法

[复制链接]

13

主题

10

回帖

49

积分

初级会员

积分
49
发表于 2021-6-10 12:55:09 | 显示全部楼层 |阅读模式
我想把一个64K常数表放到ROM flash里,但是程序运行时对应的表数组变量要在RAM地址里,在IAR如何配置?(nor flash访问速度没有RAM快,所以我把特殊数据放到RAM里加速访问)
类似 section .data 对于全局变量和局部静态变量的初始值放在ROM里,但是变量是在RAM地址,启动时候把DATA段copy到RAM来初始化对应变量。程序员感知不到,就把这些变量当做普通RAM变量来用。
GCC我知道如何去做,如下:但是IAR如何做不清楚,请指导

/* Used by the startup to initialize data */

  _sidata = LOADADDR(.data);
  /* Initialized data sections into "RAM" Ram type memory */
  .data :
  {
    . = ALIGN(4);

    _sdata = .;        /* create a global symbol at data start */

    *(.data)           /* .data sections */

    *(.data*)          /* .data* sections */
    . = ALIGN(4);

    _edata = .;        /* define a global symbol at data end */
  } >RAM AT> ROM

汇编启动文件里这样做

/* Copy the data segment initializers from flash to SRAM */

  ldr r0, =_sdata

  ldr r1, =_edata

  ldr r2, =_sidata

  movs r3, #0

  b LoopCopyDataInit



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2021-6-10 14:23:45 | 显示全部楼层
参考下

IAR中的程序代码在RAM执行的方法
http://www.armbbs.cn/forum.php?m ... 8192&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

19

主题

371

回帖

428

积分

高级会员

积分
428
发表于 2021-6-10 15:45:11 | 显示全部楼层
头文件xxx.h
extern int var[65536];
源文件xxx.c
int var[65536] = { };            // 初始化值

这样用不行吗?
回复

使用道具 举报

59

主题

284

回帖

461

积分

高级会员

积分
461
发表于 2021-6-10 23:30:53 来自手机 | 显示全部楼层
不用const修饰,不就是在ram么,启动的时候会自动拷贝到ram
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 06:52 , Processed in 0.159017 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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