共享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 = [from 0x8000 to 0xFFFF];
define region FarFuncCode = [from 0x8000 to 0xFFFF];
define region HugeFuncCode = [from 0x8000 to 0xFFFF];
改为
define region NearFuncCode = [from 0x9000 to 0xFFFF];
define region FarFuncCode = [from 0x9000 to 0xFFFF];
define region HugeFuncCode = [from 0x9000 to 0xFFFF];
就可以了,应用程序就可以开中止了,IAP便是这么简略吧!
当然我这里是用0x9000地址作为应用程序区的首地址,至于各位BOOT巨细是多小就按不同的数值设置
可是有必要记住在BOOT的中止向量重定向表也有必要要相应修正哦!
解析下BOOT重定向表内的0x82008080为什么是这个数值:由于重定向表跟中止表重叠了,编译器就先分配重定向表,在接着的地址0x008080处,
再分配一份中止向量表,所以其实是两份中止向量表,所以BOOT重定向表内的0x82008080便是为了要跳到真实的BOOT程序进口,
由于在0x8080处才是真实跳转到__iar_program_start进口。
STM8 IAR中断向量表重映射
分享STM8IAP方法A:BOOT项目里操作:1.把BOOT程序跟应用程序分两个项目编写2.在BOOT程序里最重要的是中断向量表重定向,icf文件就不用设…
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/chuanganqi/274634.html