打印

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

[复制链接]
2102|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楼的是否可以说具体一点?

使用特权

评论回复
5
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

使用特权

评论回复
6
Swd21ic| | 2008-10-19 10:27 | 只看该作者

re看不懂..

7FFFF = 512K > 150K

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

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

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

难道不行么

使用特权

评论回复
7
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 */

使用特权

评论回复
8
| | 2008-10-20 09:11 | 只看该作者

呵呵....

使用特权

评论回复
9
imffo| | 2008-10-20 17:49 | 只看该作者

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

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

10

帖子

0

粉丝