當(dāng)前位置:首頁 > 汽車電子1 > 糖果Autosar
[導(dǎo)讀]一、背景知識(shí)??BOOT跳轉(zhuǎn)到APP,就跟我們程序里面函數(shù)調(diào)用跳轉(zhuǎn)是一樣的,并不會(huì)復(fù)位外設(shè),需要用戶手動(dòng)去操作。導(dǎo)致我們BOOT跳轉(zhuǎn)APP經(jīng)常會(huì)遇到這樣那樣的問題,根本原因還是BOOT跳轉(zhuǎn)前沒有提供一個(gè)干凈的環(huán)境給APP運(yùn)行,這個(gè)環(huán)境如果可以達(dá)到和程序剛上電時(shí)的狀態(tài)是最好的。??...



一、背景知識(shí)


BOOT跳轉(zhuǎn)到APP,就跟我們程序里面函數(shù)調(diào)用跳轉(zhuǎn)是一樣的,并不會(huì)復(fù)位外設(shè),需要用戶手動(dòng)去操作。導(dǎo)致我們BOOT跳轉(zhuǎn)APP經(jīng)常會(huì)遇到這樣那樣的問題,根本原因還是BOOT跳轉(zhuǎn)前沒有提供一個(gè)干凈的環(huán)境給APP運(yùn)行,這個(gè)環(huán)境如果可以達(dá)到和程序剛上電時(shí)的狀態(tài)是最好的。


一般情況下,大家的跳轉(zhuǎn)程序是下面這種玩法,各種倒騰中斷,外設(shè)復(fù)位等,哪個(gè)遺漏了,在APP里面都會(huì)有意想不到的效果。






二、解決辦法


我們跳轉(zhuǎn)前,人為的做一個(gè)跳轉(zhuǎn)操作,提供一個(gè)干凈的運(yùn)行環(huán)境,思路框圖如下:






框圖含義:我們的正常BOOT里面有各種操作,跳轉(zhuǎn)前逐個(gè)復(fù)位太繁瑣,經(jīng)常會(huì)有各種遺漏沒考慮到,特別是BOOT里面用到了,APP也用到的外設(shè)。
那么我們就可以人為的執(zhí)行一個(gè)軟件復(fù)位,復(fù)位后直接跳轉(zhuǎn)到APP即可,這里就有一個(gè)核心,就是我們要設(shè)置一個(gè)不被編譯器初始化的變量,我們可以BOOT和APP里面都使用。




(1)MDK AC5設(shè)置:
AC5設(shè)置設(shè)置最簡單,定義下即可:


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


(2)MDK AC6設(shè)置:


定義如下:


uint32_t g_JumpInit __attribute__( ( section( ".bss.NoInit"))); 分散加載設(shè)置,定義一個(gè)占用4字節(jié)大小的.bss.NoInit分段。




(3)IAR設(shè)置:


定義如下:


#pragma location = ".NoInit" uint32_t g_JumpInit; 分享加載設(shè)置,定義一個(gè)占用4字節(jié)大小的.noinit 分段(實(shí)際上下面的定義是占用了5個(gè)字節(jié))。




三、視頻講解說明


配套的例子點(diǎn)擊本帖末尾閱讀原文可下載,視頻講解說明如下:


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。

糖果Autosar

96 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉