嵌入式单片机IAP的工作过程

IAP是 直译 在应用中编程 的缩写。本意是指设备的程序跑起来的时候对设备进行程序修改,这样说更符合嵌入式设备的IAP实际工作过程。

一般不含IAP程序的单片机启动后直接到main后开始运行就可以了

原理上的

一般嵌入式单片机的IAP过程主要完成两个过程 以STM32为例
1.程序(Fuc1)先进行必要的初始化(如与为获取IAP的设备外设功能初始化 定时器 校验器之类的) 然后进行收程序包的工作 确认收完或者超时或者达到某种条件进入第二步
2.用函数指针进行起始代码跳转 这个里面放完成实际功能的程序(叫他Fuc2),然后在这个完成实际功能的程序的开始进行中断向量表移位操作。

实操上的细节

重点是第二步的跳转
Fuc1中达到某种开发者认为可以跳到正常应用程序的条件时
一般利用函数指针跳转到Fuc2所在的地址Addr2(可以自定义,但是必须在代码区 以407vet为例在0x0800 0000~0x0807 FFFF内) 在烧写Fun2时 代码区起始地址配置成Addr2 这样跳转后就能从这个地址为起始地址开始跑正常代码。这两个数字加起来应该等于代码区最后一个字节的地址这两个数字加起来应该等于代码区最后一个字节的地址

跳转后Fun2的中断向量重定位
打开条件编译的开关打开条件编译的开关 即取消83行的注释 修改95行的偏移地址量
搜索这个偏移量可以发现在SystemInit()中会对这个偏移地址进行偏移 调用NVIC_SetVector函数后,此后相应的向量跳转值都会发生偏移
这样fun2就可以正常跳转到它的ISR(中断服务程序)了。建议做一个函数将所有的IRQ进行偏移 调多个NVIC_SetVector(相应IRQ,)
在这里插入图片描述这是在更新向量表的位置在这里插入图片描述把函数地址写入更新后的向量表 这里不用改 只是说明函数地址写到新的向量表中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值