stm8 IAP

A:BOOT 项目里操作:

1.把BOOT程序跟应用程序分两个项目编写

2.在BOOT程序里最重要的是中断向量表重定向,icf文件就不用设置了(BOOT里不能开中断)

中断向量表重定向设置方法代码如下:该表放到main文件最上面就可以了。

#define SW_START_ADDR //应用程序起始地址
__root const long reintvec[]@".intvec"=
{ 0x82008080,0x82000004|SW_START_ADDR,0x82000008|SW_START_ADDR,0x8200000c|SW_START_ADDR,
  0x82000010|SW_START_ADDR,0x82000014|SW_START_ADDR,0x82000018|SW_START_ADDR,0x8200001c|SW_START_ADDR,
  0x82000020|SW_START_ADDR,0x82000024|SW_START_ADDR,0x82000028|SW_START_ADDR,0x8200002c|SW_START_ADDR,
  0x82000030|SW_START_ADDR,0x82000034|SW_START_ADDR,0x82000038|SW_START_ADDR,0x8200003c|SW_START_ADDR,
  0x82000040|SW_START_ADDR,0x82000044|SW_START_ADDR,0x82000048|SW_START_ADDR,0x8200004c|SW_START_ADDR,
  0x82000050|SW_START_ADDR,0x82000054|SW_START_ADDR,0x82000058|SW_START_ADDR,0x8200005c|SW_START_ADDR,
  0x82000060|SW_START_ADDR,0x82000064|SW_START_ADDR,0x82000068|SW_START_ADDR,0x8200006c|SW_START_ADDR,
  0x82000070|SW_START_ADDR,0x82000074|SW_START_ADDR,0x82000078|SW_START_ADDR,0x8200007c|SW_START_ADDR,
};

3.BOOT程序编写通信协议及FLASH代码就行了,还有一点要记住,BOOT程序里不要开中断!

这种方法缺点就是会浪费约128个字节的FLASH空间,如果有高手能把这些空间省下来,请指点!

4.BOOT程序跳转:

void boot_go(u16 addr)
{
    __asm("mov 0x50A3,#0xFF");
    __asm("mov 0x50A4,#0xFF"); //itc clear
    __asm("ldw X,(2,X)");
    __asm("jp (X)");
}

B:应用程序项目里操作:

//在应用程序项目里必须在icf文件修改,修改如下:把下面三行
define region NearFuncCode = [from 0x8000 to 0xFFFF];
define region FarFuncCode = [from 0x8000 to 0xFFFF];
define region HugeFuncCode = [from 0x8000 to 0xFFFF];
//改为,其中SW_START_ADDR 为程序起始地址;
define region NearFuncCode = [from SW_START_ADDR  to 0xFFFF];
define region FarFuncCode = [from SW_START_ADDR  to 0xFFFF];
define region HugeFuncCode = [fromSW_START_ADDR  to 0xFFFF];

下篇文章会更新stm8 flash相关操作,便于和iap结合使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值