LXXAVR 发表于 2013-3-9 16:44:46

STM8L 的IAP功能

分享STM8 IAP方法
A:BOOT 项目里操作:
1.把BOOT程序跟应用程序分两个项目编写
2.在BOOT程序里最重要的是中断向量表重定向,icf文件就不用设置了(BOOT里不能开中断)
   中断向量表重定向设置方法代码如下:
         __root const long reintvec[]@".intvec"=
      {   0x82008080,0x82009004,0x82009008,0x8200900c, //当应用程序地址不是0x9000时则要相应改掉除第一个0x82008080以外的数值
            0x82009010,0x82009014,0x82009018,0x8200901c,
            0x82009020,0x82009024,0x82009028,0x8200902c,
            0x82009030,0x82009034,0x82009038,0x8200903c,
            0x82009040,0x82009044,0x82009048,0x8200904c,
            0x82009050,0x82009054,0x82009058,0x8200905c,
            0x82009060,0x82009064,0x82009068,0x8200906c,
            0x82009070,0x82009074,0x82009078,0x8200907c,
      };
3.然后BOOT程序的跟一般程序一样编写通信协议及FLASH操作代码就行了,还有一点要记住,BOOT程序里不要开中断哦!
这种方法缺点就是会浪费约128个字节的FLASH空间,如果有高手能把这些空间省下来,请指点哦!

B:应用程序项目里操作:
在应用程序项目里必须在icf文件修改,修改如下:
把下面三行
define region NearFuncCode = ;
define region FarFuncCode = ;
define region HugeFuncCode = ;
改为
define region NearFuncCode = ;
define region FarFuncCode = ;
define region HugeFuncCode = ;
就可以了,应用程序就可以开中断了,IAP就是这么简单吧!


当然我这里是用0x9000地址作为应用程序区的首地址,至于各位BOOT大小是多小就按不同的数值设置
但是必须记得在BOOT的中断向量重定向表也必须要相应修改哦!
解析下BOOT重定向表内的0x82008080为什么是这个数值:因为重定向表跟中断表重叠了,编译器就先分配重定向表,在接着的地址0x008080处,
再分配一份中断向量表,所以其实是两份中断向量表,所以BOOT重定向表内的0x82008080就是为了要跳到真正的BOOT程序入口,
因为在0x8080处才是真正跳转到__iar_program_start入口。



以上是网上的资料,
STM8 IAP功能, 由于产品的需要, 目前要做此功能, 有做过的同志能否指一二呀?






jetli 发表于 2013-3-9 19:37:53

1、发错论坛

2、标题不合

3、一贴多发、、、、

撸主,你觉悟吧~~~{:titter:}

tinyguoguo 发表于 2013-3-28 15:26:59

好帖保存着

52HLX 发表于 2016-7-2 09:46:29

学习一下

xuzhiping9889 发表于 2016-12-6 09:45:15

学习了{:smile:}{:smile:}{:smile:}
页: [1]
查看完整版本: STM8L 的IAP功能