IAR 像访问内存一样访问STM8 EEPROM编译时报错

2019-07-19 21:06发布

我在IAR FOR STM8编译器下定义了一个数组__eeprom __no_init u16 tps_[8];但是编译的时候提示错误如下:


我用的寄存器方式操作STM8S208RB  头文件就只包含了一个#include <iostm8s208rb.h> 不知是不是还需要包含相关头文件  看原子哥的固件库方式这样访问EEPROM的程序
都可以编译通过,忘指点一下小弟啊!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
正点原子
2019-07-20 02:59
要想用:__eeprom关键字,必须实现三个函数。
//以下三个函数,以支持IAR独有的__eeprom关键字操作
//EEPROM完成操作等待
void __eeprom_wait_for_last_operation(void)
{
STMFLASH_WaitForLastOperation(1); //等待操作结束
}
//EEPROM,在指定位置写入一个字节数据
//addr:地址
//data:要写入的数据
void __eeprom_program_byte(unsigned short addr,unsigned char data)
{
__eeprom_wait_for_last_operation();  
   STMFLASH_Unlock(1); 
*(PointerAttr u8*)(u16)addr=data;
__eeprom_wait_for_last_operation(); 
STMFLASH_Lock(1);   
}    
//EEPROM,在指定位置写入一个long型数据(4字节)
//addr:地址
//data:要写入的long型数据
void __eeprom_program_long(unsigned short addr,unsigned long data)
{
__eeprom_wait_for_last_operation();  
   STMFLASH_Unlock(1); 
*(PointerAttr u8*)(u16)addr=(u8)(data>>24);  
__eeprom_wait_for_last_operation(); 
*(PointerAttr u8*)(u16)(addr+1)=(u8)(data>>16);  
__eeprom_wait_for_last_operation(); 
*(PointerAttr u8*)(u16)(addr+2)=(u8)(data>>8);  
__eeprom_wait_for_last_operation(); 
*(PointerAttr u8*)(u16)(addr+3)=(u8)(data&0XFF);  
__eeprom_wait_for_last_operation();  
STMFLASH_Lock(1); 
}

一周热门 更多>