打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
实战技能分享,一劳永逸的解决BOOT跳转APP失败问题,含MDK AC5,AC6和IAR

本次帖子制作了视频版。

一、背景知识

    BOOT跳转到APP,就跟我们程序里面函数调用跳转是一样的,并不会复位外设,需要用户手动去操作。导致我们BOOT跳转APP经常会遇到这样那样的问题,根本原因还是BOOT跳转前没有提供一个干净的环境给APP运行,这个环境如果可以达到和程序刚上电时的状态是最好的。

    一般情况下,大家的跳转程序是下面这种玩法,各种倒腾中断,外设复位等,哪个遗漏了,在APP里面都会有意想不到的效果。

二、解决办法

    我们跳转前,人为的做一个跳转操作,提供一个干净的运行环境,思路框图如下:

    框图含义:我们的正常BOOT里面有各种操作,跳转前逐个复位太繁琐,经常会有各种遗漏没考虑到,特别是BOOT里面用到了,APP也用到的外设。
    那么我们就可以人为的执行一个软件复位,复位后直接跳转到APP即可,这里就有一个核心,就是我们要设置一个不被编译器初始化的变量,我们可以BOOT和APP里面都使用。

(1)MDK AC5设置:
AC5设置设置最简单,定义下即可:

uint32_t g_JumpInit __attribute__((at(0x20000000), zero_init));

(2)MDK AC6设置:

定义如下:

uint32_t g_JumpInit __attribute__( ( section( '.bss.NoInit')));

分散加载设置,定义一个占用4字节大小的.bss.NoInit分段。

(3)IAR设置:

定义如下:

#pragma location = '.NoInit' uint32_t g_JumpInit;

分享加载设置,定义一个占用4字节大小的.noinit 分段(实际上下面的定义是占用了5个字节)。

三、视频讲解说明

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
MDK下怎样才能让变量在复位时不被初始化
MDK-ARM如何生产Bin文件
【精品博文】IAR下使用noinit段的方法和指定地址的变量分配
STM32F4系列的app和boot相互跳转
基于蓝牙的STM32 IAP在线升级
aliboot
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服