当前位置:首页 > 汽车电子1 > 糖果Autosar
[导读]一、背景知识  BOOT跳转到APP,就跟我们程序里面函数调用跳转是一样的,并不会复位外设,需要用户手动去操作。导致我们BOOT跳转APP经常会遇到这样那样的问题,根本原因还是BOOT跳转前没有提供一个干净的环境给APP运行,这个环境如果可以达到和程序刚上电时的状态是最好的。  ...



一、背景知识


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个字节)。




三、视频讲解说明


配套的例子点击本帖末尾阅读原文可下载,视频讲解说明如下:


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。

糖果Autosar

96 篇文章

关注

发布文章

编辑精选

技术子站

关闭