如何将150K一维数组的空间放falsh?

[复制链接]
3580|8
 楼主| 810506 发表于 2008-10-17 19:07 | 显示全部楼层 |阅读模式
一般在linker file中有这样的制定

<flash.xcl>
// Code memory in FLASH
-DROMSTART=0x8000000
-DROMEND=0x807FFFF

// Data in RAM
-DRAMSTART=0x20000000
-DRAMEND=0x2000FFFF

我的应用需要150K一维数组的空间,是不是可以将Data放在flash里面?
我试了很多方式,就是没有办法将150K一维数组的空间放falsh,而RAM
又太小,不知道各位高手有什么高招?
black_wolf 发表于 2008-10-17 21:07 | 显示全部楼层

定义成 const 或者用指针

Again_gyf 发表于 2008-10-17 22:24 | 显示全部楼层

看看IAR手册吧!

把变量分配到固定地址即可!
 楼主| 810506 发表于 2008-10-18 21:24 | 显示全部楼层

数组的放在STM32F的falsh

2楼的方法试过了,还是不行!
3楼的是否可以说具体一点?
grant_jx 发表于 2008-10-18 22:49 | 显示全部楼层

IAR C编译器支持Segment关键字

IAR的链接器是支持Segment的。你可以在分散链接文件中加入一个自定义segment段,将其定位在ROM的某个区域,然后在变量定义申明的时候将其归类到自定义的这个segment中即可。具体可以看IAR的C/C++编译器参考向导,搜索“Placing code and data”可以找到你需要的。


The following illustrates how to use the -Z command to place the segment MYSEGMENTA followed by the segment MYSEGMENTB in CONST memory (that is, ROM) in the memory range 0x008000-0x0FFFFF.

-Z(CONST)MYSEGMENTA,MYSEGMENTB=008000-0FFFFF
Swd21ic 发表于 2008-10-19 10:27 | 显示全部楼层

re看不懂..

7FFFF = 512K > 150K

link文件对每个段的大小没有限制..常数是放入DATA_C段. 只要总的不超过就没问题

你放150k的常数表..那直接放就好了啊..

const DATATPYE Table[] = {...};

难道不行么
 楼主| 810506 发表于 2008-10-19 18:53 | 显示全部楼层

问题已经搞定了,谢谢各位

问题已经搞定了,直接定义数组类型为uc8或u8 const,千万不要写成const u8,否则编译总是有问题,具体说明如下:

typedef signed long  const sc32;  /* Read Only */
typedef signed short const sc16;  /* Read Only */
typedef signed char  const sc8;   /* Read Only */

typedef unsigned long  const uc32;  /* Read Only */
typedef unsigned short const uc16;  /* Read Only */
typedef unsigned char  const uc8;   /* Read Only */
发表于 2008-10-20 09:11 | 显示全部楼层

呵呵....

imffo 发表于 2008-10-20 17:49 | 显示全部楼层

const u8 是没问题的,我在IAR4.42上就是这么用的。

const u8 是没问题的,我在IAR4.42上就是这么用的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

10

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部