打印
[STM8]

OptionBytes/eeprom 初始化数据内嵌入HEX,IAR1.42.2无错误编译通

[复制链接]
2839|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ethan.wong|  楼主 | 2014-2-26 11:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ethan.wong 于 2014-2-28 10:29 编辑
/* Private OptionBytes -------------------------------------------------------*/
#define OptROP        0xaa
#define OptUBC        0x12
#define OptAFR        0x34
#define OptMIS        0x56
#define OptCLK        0x78
#define OptHSE        0x9a
__root __far const uint8_t OptionBytes[]@0x004800={OptROP,OptUBC,(uint8_t)(~OptUBC),OptAFR,(uint8_t)(~OptAFR),OptMIS,(uint8_t)(~OptMIS),OptCLK,(uint8_t)(~OptCLK),OptHSE,(uint8_t)(~OptHSE)};

/* Private eeprom-------------------------------------------------------------*/
__root __eeprom uint16_t RfAddr@0x4000=0x1234;

生成的HEX
:02400000123478
:0B480000AA12ED34CB56A978879A6508


网上关于eeprom,OptionBytes内嵌入HEX文件的办法太乱了,总是要修改链接文、配置文件的,以上代码无需改动任何文件,即可像定义常量一样将eeprom,OptionBytes等初始化数据直接内嵌在HEX文件中,在用量产编程器编程时可以直接加载配置数据。
沙发
ethan.wong|  楼主 | 2014-2-26 11:32 | 只看该作者
编译生成的HEX数据,可以在编程器中加载
:0B480000AA12ED34CB56A978879A6508

使用特权

评论回复
板凳
nienianhong| | 2014-2-26 13:17 | 只看该作者
你想表达什么

使用特权

评论回复
地板
ethan.wong|  楼主 | 2014-2-28 10:14 | 只看该作者
nienianhong 发表于 2014-2-26 13:17
你想表达什么

网上关于eeprom,OptionBytes内嵌入HEX文件的办法总是改这链接文件,改那配置文件的,以上代码无需改动任何文件,即可像定义常量一样将eeprom,OptionBytes等初始化数据直接内嵌在HEX文件中,在用量产编程器编程时可以直接加载配置数据。

使用特权

评论回复
5
myxiaonia| | 2014-3-3 00:18 | 只看该作者
用汇编文件直接搞定,mdk下有

使用特权

评论回复
6
ethan.wong|  楼主 | 2014-3-3 17:19 | 只看该作者
myxiaonia 发表于 2014-3-3 00:18
用汇编文件直接搞定,mdk下有

都用汇编了,还用C来干嘛呢。
那还可以根据HEX文件规则直接用记事本写HXE文件了。
有些EEPROM变显是需要在函数中调用的……

使用特权

评论回复
7
myxiaonia| | 2014-3-4 12:57 | 只看该作者
ethan.wong 发表于 2014-3-3 17:19
都用汇编了,还用C来干嘛呢。
那还可以根据HEX文件规则直接用记事本写HXE文件了。
有些EEPROM变显是需要 ...

好吧 也可以向你这样的绝对定位方法,你只是用扩展语法来修改链接配置,mdk中就是分散加载文件了

使用特权

评论回复
8
caijun_2012| | 2014-3-5 21:08 | 只看该作者
编译环境:IAR 1.41
怎么编译错误了
提示编译错误:Error[Ta004]: __eeprom variable must be __no_init
怎么解决了

使用特权

评论回复
9
ethan.wong|  楼主 | 2014-3-6 10:37 | 只看该作者
caijun_2012 发表于 2014-3-5 21:08
编译环境:IAR 1.41
怎么编译错误了
提示编译错误:Error[Ta004]: __eeprom variable must be __no_init

1.41 不支持__eeprom关键字初始化,
升级到 1.42吧,1.42变化比较大

使用特权

评论回复
10
ethan.wong|  楼主 | 2014-3-6 10:41 | 只看该作者
caijun_2012 发表于 2014-3-5 21:08
编译环境:IAR 1.41
怎么编译错误了
提示编译错误:Error[Ta004]: __eeprom variable must be __no_init

可以申明成不被始化的变量,然后在编程器里填手工填入EEPROM数据,

__eeprom uint16_t RfAddr@0x4000;

仿真时,下载好程序后,手工更改EEPROM数据为初始化数据,然后再运行。

使用特权

评论回复
11
470149749| | 2016-5-6 15:32 | 只看该作者
ethan.wong 发表于 2014-2-26 11:32
编译生成的HEX数据,可以在编程器中加载
:0B480000AA12ED34CB56A978879A6508

你好!请问你用的什么编程器,我用的5000U-PLUS量产编程器不支持把配置字嵌入的hex文件中,本人邮箱470149749@qq.com,多谢指教

使用特权

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

本版积分规则

个人签名:给我一个概念,将成本浓缩于“易芯”中         让市场摆脱科技的束缚,将技术转化为丰的硕果

8

主题

47

帖子

0

粉丝