M0+系列 CX32l003单片机BOOT程序与APP程序之间的跳转(IAP相关)

   

 

    boot程序即bootloader引导程序, 是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,以及升级程序,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用系统准备好正确的环境。而这bootloader程序几乎大部分应用在CPU、ARM等芯片上。

       而对于单片机来说,其boot并不复杂,因为厂家在出厂之前就已经默认了单片机的启动位置。除了具有多种boot启动方式的单片机以外,一般的单片机就只有默认的厂家启动方式。

      提到boot,如果单片机有了一段boot代码(注意这里的boot虽然和LINUX系统下的boot相似,但也有区别,区别就在于存储的位置和启动位置不同,linux芯片的boot存在于外部FLASH等存储芯片,而单片机的boot其实就相当于存储在自身ROM的一段用户代码,通过这段用户代码跳转到另一端用户代码)。那么对于后续单片机的维护那将是非常方便的事。说到这里,就很清晰了 这就涉及到了IAP编程。而如果要实现IAP编程,那么实现单片机程序的跳转就是必须的了。

      要实现程序跳转,如下几步既可以完成。

      boot程序设置:

      1、添加如下代码

 JumpAddress = 0x2000;  //复位地址          
      Jump_To_Application = (pFunction) (JumpAddress+1);                
      __set_MSP(JumpAddress);     //将栈顶指针设置成栈顶地址  
      Jump_To_Application();     //设置PC指针为复位地址

 2、设置 Options Target

       同样的,对于app程序来说,就需要设置其对应的地址即可

       app程序设置:


JumpAddress = 0x0;                
      Jump_To_Application = (pFunction) (JumpAddress+1);                            
      __set_MSP(JumpAddress);                            
      Jump_To_Application();

注意一点,如果app程序中包含中断的话,那么就需要把中断向量表的偏移与设置的起始地址一致。

以上就是boot程序和app程序的设置方法。

为了形象说明,在boot程序里用串口发送"BOOT",然后跳转到APP程序,app程序发送"APP",然后跳转到boot程序,循环往复

 

见如下视频展示的效果

app和boot程序跳转

以上就是boot和app程序的互相跳转,实现了跳转,那么对于后续程序的升级和维护(IAP)来说,就相当的方便了。

 关注公众号“嵌入式软硬件爱好者”  ,发送"跳转",获取boot和app互相跳转源码

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醉月、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值