[STM8] STM8当定义数组到EEPROM中时,如果选择非debgu优化编译出错

[复制链接]
5049|5
 楼主| zhseedling 发表于 2012-7-11 22:29 | 显示全部楼层 |阅读模式
本帖最后由 zhseedling 于 2012-7-11 22:32 编辑

首先按照cosmic手册里说定义到eeprom中用关键字@eeprom
我发现使用

@eeprom u8 eepromVariables[8] @0x4000;


u8 eepromVariables[8] @0x4000;

两句效果完全相同,

声明的时候使用

extern u8 eepromVariables[8] @0x4000;

就没有问题。


当然了,这是编译时优化选择“Disable for Debugging”。

如果优化选“最快执行速度”或“最小代码大小”就会在声明变量的地方发生编译错误

错误提示相同,为以下两句

#error castm8 C:\Users\HaHi\AppData\Local\Temp\sehk.cx1:1459
symbol exgwx not defined
#error castm8 C:\Users\HaHi\AppData\Local\Temp\sehk.cx1:1442
bad comment delimiter

可是那个文件根本不存在。



在此分享下如何在STM8中声明eeprom变量,虽然网上有很多定义变量到eeprom的例子,可是我却没发现声明的方法,因为多个c文件之间必须声明。

但是使用

@eeprom u8 a;

使用以下声明方法

@eeprom extern u8 a;

extern @eeprom u8 a;

extern u8 a;

extern u8 a @eeprom;

都不行,总是说零页变量在0x4000地址之类的错误,但如果不声明只在定义的地方用就没有问题。


后来发现必须使用上面那种方法,也就是加上地址

@eeprom u8 a @0x4000;

声明时用

extern u8 a @0x4000;

才可以。
 楼主| zhseedling 发表于 2012-7-11 22:33 | 显示全部楼层
论坛出问题了?怎么标题都不显示标题,而显示的是内容的一部分
 楼主| zhseedling 发表于 2012-7-12 13:23 | 显示全部楼层
自己顶一下吧
 楼主| zhseedling 发表于 2012-7-13 19:43 | 显示全部楼层
:victory:
 楼主| zhseedling 发表于 2012-9-3 13:03 | 显示全部楼层
看来都木有人用stm8呢
lufengfeng 发表于 2016-12-30 09:37 | 显示全部楼层
假如你前面用了“@eeprom u8 eepromVariables[8] @0x4000;”来定义。那么必须用这个语句来声明:“extern @eeprom u8 eepromVariables[8] @0x4000;”。但是如果用“@eeprom u8 eepromVariables[8];”来定义,那么这样声明“extern @eeprom u8 eepromVariables[8] ;”就可以了,也就是说,在声明时只需按原样在前面加上“extern”即可,当然在定义是有赋值的要在声明时将等号后面去掉。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

27

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部