打印
[AVR单片机]

IAR编译器有没有这样的功能

[复制链接]
2051|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiao|  楼主 | 2007-8-24 09:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
pppking| | 2007-8-24 17:08 | 只看该作者

你可以用宏定义

#define FRAM_ADDRESS1 0x00
#define FRAM_ADDRESS2 FRAM_ADDRESS1+sizeof(xxstruct)
如此类推,就解决好你的问题了

使用特权

评论回复
板凳
smxdss| | 2007-8-24 17:40 | 只看该作者

各类C的编译器的结构体只能定义在线性内存中,或是线性的程序空间中;

你可以使用EC++(IAR有),

定义一个类,重构一些基本运算符,以达到在SPI铁电体的定义的结构体的存取和访问。

使用特权

评论回复
地板
xiao|  楼主 | 2007-8-24 20:32 | 只看该作者

多谢二位高人指点,不过我看了下编译器文档有点收获。

关键字__eeprom的内存操作可以自定义,就是说可以把内存定义在任意位置,比如IIC总线的内存中,还没来的及试。感觉IAR功能挺强的想的到的功能都能找到: )。

使用特权

评论回复
5
tczgg| | 2007-8-26 23:07 | 只看该作者

我想能做到

你可以修改XCL文件,增加一个FRAM段定义

-D_..X_FRAM_START=0         //假设是一个1K Byte的FRAM,起始地址为0  
-D_..X_FRAM_END=3FF
-Z(DATA)FRAM=_..X_FRAM_START-_..X_FRAM_END

在程序中你可以这样定义:
#pragma segment = "FRAM"
__no_init YOUR_STRUCT var_name1 @ "FRAM";
__no_init YOUR_STRUCT var_name2 @ "FRAM";
__no_init int var_name3 @ "FRAM";

编译器会帮你在FRAM中分配空间,但存取操作要你自己控制

我没测试过,你自己试试看吧。另外我猜想必须要加上"__no_init"

使用特权

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

本版积分规则

7

主题

162

帖子

1

粉丝