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

[复制链接]
6165|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 | 显示全部楼层
上面那种定义是编译器自动分配地址,,你现在要指定地址肯定不能用上面的形式了。。
uet_cache 发表于 2013-1-10 11:10 | 显示全部楼层
官方对寄存器操作,寄存器就是FLASH固定地址的,,你看看它的是如何定义,,,
 楼主| hd12 发表于 2013-1-10 14:21 | 显示全部楼层
寄存器定义就是指针,“*(unsigned char *)Address”,也不会有“初始值”。

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

本版积分规则

4

主题

118

帖子

0

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