打印
[AVR单片机]

IAR C++能不能定义类到FLASH里?

[复制链接]
2259|8
手机看帖
扫描二维码
随时随地手机跟帖
沙发
hotpower| | 2008-2-12 20:16 | 只看该作者

晕~~~不住在FLASH里住哪里???实在是晕呀~~~

使用特权

评论回复
板凳
hotpower| | 2008-2-12 20:22 | 只看该作者

建议楼主先下载这本书学习完后再玩C++吧~~~

使用特权

评论回复
地板
xwj| | 2008-2-12 20:24 | 只看该作者

呵呵^_^

使用特权

评论回复
5
hotpower| | 2008-2-12 20:25 | 只看该作者

哈哈~~~看到楼主学C++的心情,俺是"很黄很暴力"~~~佩服~~~

使用特权

评论回复
6
ATmega32L|  楼主 | 2008-2-13 15:52 | 只看该作者

IAR C++能不能定义类到FLASH里?

IAR C++能不能定义类到FLASH里?
需要把类的所有成员全部定义到FLASH里,不占用RAM空间。
我用IAR怎么弄都不行,出现问题:
1.不能调用成员函数,调用成员函数,编译都不能通过。
2.传递的this指针不是指向FLASH的指针,导致用成员函数读取成员变量出错。(编译出来的汇编代码是读取RAM里面的数据,并非FLASH里面的数据)。


恳请hotpower给个实例。

使用特权

评论回复
7
hotpower| | 2008-2-13 16:31 | 只看该作者

static const

使用特权

评论回复
8
ATmega32L|  楼主 | 2008-2-13 16:48 | 只看该作者

static const会导致多个类实体公用一个变量

static const会导致多个类实体公用一个变量。
如果需要定义多个类实体就不好办了。

比如说电子菜单,以前是用定义在FLASH里面的结构体,
现在想用定义在FLASH里面的类,不过好像行不同。

使用特权

评论回复
9
ATmega32L|  楼主 | 2008-2-14 19:38 | 只看该作者

借用GCC的办法好像可以

#include <stdio.h>
#include <stdint.h>


#define pgm8(A)  (*( uint8_t __flash * )(&(A)))
#define pgm16(A)  (*( uint16_t __flash*)(&(A)))
#define pgm32(A)  (*(uint32_t __flash*)(&(A)))

#define pgm_item(A)   ((TItem  * )&(A))

class  TItem      
{
public:
    uint8_t size;   
    uint8_t * str;    
    TItem  * child;   
    TItem  * parent;  
  
    uint8_t   get_size();
    uint8_t * get_str();
    TItem *   get_child();
    TItem *   get_parent();
    
    
    void sub(void);  
};   

uint8_t  TItem::get_size()
{
  return pgm8(this->size);
}

uint8_t * TItem::get_str()
{
   return (uint8_t *)pgm16(this->str); 
}



__flash TItem Item0;
__flash TItem Item1;
__flash TItem Item3={0xaa,(uint8_t *)"ABCDEFG",pgm_item(Item0),pgm_item(Item1)};

    uint8_t size;   
    uint8_t * str;    
    TItem  * child;   
    TItem  * parent;  

int main()
{
  
 size=pgm_item(Item3)->get_size();
 str=pgm_item(Item3)->get_str();

 while(1);
  
}

使用特权

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

本版积分规则

144

主题

376

帖子

0

粉丝