打印

求助:IAR FOR STM8 怎么定义常量到FLASH指定地址

[复制链接]
5698|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hd12|  楼主 | 2013-1-10 00:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,用的是STM8S105,编译器是IAR for STM8 1.31,
DeviceNO(设备号)是一个常量,同种类型的相同,我想把这个常量指定放在FLASH的一个地方,以后可能升级的时候直接用IAP更新这个地址,
看到网上的方法,比如地址0x8800,DeviceNO = 5, 在头文件里写成:
const unsigned char DeviceNO @ 0x8800 = 5;   就能让地址0x8800里的值存为5
我按这样写,编译的时候报错,提示如果指定了地址,就必须在前面加“__no_init”这个扩展关键字,但如果我在前面加上这个扩展关键字的话,编译又报错说不用初始化的量不允许赋值。编辑ICF链接文件定义了地址也不能赋值。

请问版主,这个问题怎么解决?
沙发
uet_cache| | 2013-1-10 09:53 | 只看该作者
可以参考库中对寄存器的操作方法。。。

使用特权

评论回复
板凳
hd12|  楼主 | 2013-1-10 11:05 | 只看该作者
寄存器都是不用你给出固定值的。直接写成
__no_init const unsigned char variby @ registor;
这种形式就可以了

使用特权

评论回复
地板
uet_cache| | 2013-1-10 11:10 | 只看该作者
上面那种定义是编译器自动分配地址,,你现在要指定地址肯定不能用上面的形式了。。

使用特权

评论回复
5
uet_cache| | 2013-1-10 11:10 | 只看该作者
官方对寄存器操作,寄存器就是FLASH固定地址的,,你看看它的是如何定义,,,

使用特权

评论回复
6
hd12|  楼主 | 2013-1-10 14:21 | 只看该作者
寄存器定义就是指针,“*(unsigned char *)Address”,也不会有“初始值”。

并不会生成具有初始值的HEX或BIN文件。我需要的是指定地址存有指定数值,其它程序你可以认为只会去读,不会去写。

使用特权

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

本版积分规则

4

主题

118

帖子

0

粉丝