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

[复制链接]
3188|10
 楼主| ethan.wong 发表于 2014-2-26 11:29 | 显示全部楼层 |阅读模式
本帖最后由 ethan.wong 于 2014-2-28 10:29 编辑
  1. /* Private OptionBytes -------------------------------------------------------*/
  2. #define OptROP        0xaa
  3. #define OptUBC        0x12
  4. #define OptAFR        0x34
  5. #define OptMIS        0x56
  6. #define OptCLK        0x78
  7. #define OptHSE        0x9a
  8. __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)};

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

生成的HEX
  1. :02400000123478
  2. :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文件中,在用量产编程器编程时可以直接加载配置数据。
myxiaonia 发表于 2014-3-3 00:18 来自手机 | 显示全部楼层
用汇编文件直接搞定,mdk下有
 楼主| ethan.wong 发表于 2014-3-3 17:19 | 显示全部楼层
myxiaonia 发表于 2014-3-3 00:18
用汇编文件直接搞定,mdk下有

都用汇编了,还用C来干嘛呢。
那还可以根据HEX文件规则直接用记事本写HXE文件了。
有些EEPROM变显是需要在函数中调用的……
myxiaonia 发表于 2014-3-4 12:57 | 显示全部楼层
ethan.wong 发表于 2014-3-3 17:19
都用汇编了,还用C来干嘛呢。
那还可以根据HEX文件规则直接用记事本写HXE文件了。
有些EEPROM变显是需要 ...

好吧 也可以向你这样的绝对定位方法,你只是用扩展语法来修改链接配置,mdk中就是分散加载文件了
caijun_2012 发表于 2014-3-5 21:08 | 显示全部楼层
编译环境:IAR 1.41
怎么编译错误了
提示编译错误:Error[Ta004]: __eeprom variable must be __no_init
怎么解决了
 楼主| 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变化比较大
 楼主| 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数据为初始化数据,然后再运行。
470149749 发表于 2016-5-6 15:32 | 显示全部楼层
ethan.wong 发表于 2014-2-26 11:32
编译生成的HEX数据,可以在编程器中加载
:0B480000AA12ED34CB56A978879A6508

你好!请问你用的什么编程器,我用的5000U-PLUS量产编程器不支持把配置字嵌入的hex文件中,本人邮箱470149749@qq.com,多谢指教
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

8

主题

48

帖子

0

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