icydream 发表于 2008-7-25 08:46:29

如何在codevision avr 中定义保存在FLASH指定地址的数组或者参数?

如何在codevision avr 中定义绝对地址的数组?
本人打算使用IAP功能保存一些参数到FLASH中,而且要把参数定义到一个页面中,方便擦写,节省空间,
但是需要将参数定义在FLASH中的绝对地址中,我查了半天,也不知道在codevision avr 中如何定义啊?
各位高手帮帮忙!!

liuqian 发表于 2008-7-25 13:02:15

用flash 指针访问

icydream 发表于 2008-7-25 14:15:20

楼上能详细点么?
楼上是不是理解为这样的:
       unsigned char flash *p;
       unsigned char c;

      p=c;

是这样访问么?

我的主要问题是: 就是例如,将c定义在flash 中某个起始空间地址,例如0x100,该如何定义?

qinxg 发表于 2008-7-25 15:27:17

无解. CVAVR不支持FLASH的绝对定位. c编译器不支持rom的绝对定位.

方法1:
uchar flash c;
uchar flash *p;
p = c;

软后用: p/页面大小 得到c所在的页面序号
      p%页面大小 得到c所在的页面偏移.然后就可以操作了......

方法2:
把变量保存到flash后面的空白页面里. 直接用IAP来操作.

tidal 发表于 2008-7-25 16:03:15

用内嵌汇编可以实现定义到指定地址.
但如何读出,也许只有CVAVR知道.

icydream 发表于 2008-7-26 15:36:52

谢谢各位了,我找到一个方法,应该可以,还没下载到单片机试过:
   CVAVR中嵌入汇编可以实现绝对定位,然后使用IAP更新FLASH内容,使用FLASH指针可以读出FLASH内容;

   汇编如下:
    #asm
      ORG $0c10
      .CSEG
      .DB0x01,0x02,0x03,0x04
   #endasm

就可以将 0x01,0x02,0x03,0x04 定义到 FLASH空间 0x01,0x02,0x03,0x04中去;

icydream 发表于 2009-12-3 09:49:10

忘记回复了,按照我在五楼的回答也不行,大家不要被误导。

zhexuejia 发表于 2013-4-2 10:33:33

现在搞定了没有啊?
页: [1]
查看完整版本: 如何在codevision avr 中定义保存在FLASH指定地址的数组或者参数?