[SOS] ch573 IAP設(shè)計(jì)相關(guān)內(nèi)容?

我將一個(gè)led閃爍的程序的ld腳本的flash起始地址從0改成了8K,然后這個(gè)工程生成了bin文件led.bin;

我在另外一個(gè)工程中將這個(gè)led.bin文件通過匯編incbin放到了.data段,然后這個(gè)工程在啟動(dòng)的時(shí)候會(huì)把放進(jìn).data段的led.bin加載到內(nèi)部flash的8K的位置,加載成功以后(我通過打印和hexdump led.bin進(jìn)行了對(duì)比,加載沒有出錯(cuò)),我通過jump_app跳轉(zhuǎn)到8K這個(gè)位置去執(zhí)行,結(jié)果單片機(jī)并沒有按照預(yù)期執(zhí)行l(wèi)ed閃爍,而是導(dǎo)致了復(fù)位,一直不斷地進(jìn)行加載-復(fù)位-加載-復(fù)位,請(qǐng)問這是為啥?

請(qǐng)問我應(yīng)該怎么解決這個(gè)問題?還需要其他什么操作,才能讓加載以后跳轉(zhuǎn)到led.bin的程序?


您好,“通過打印和hexdump led.bin進(jìn)行了對(duì)比,加載沒有出錯(cuò)”能確??截惡蟮膄lash沒問題就,還要注意一下8K起始的工程中,.s文件注意下圖關(guān)于權(quán)限的修改。

注意實(shí)際量產(chǎn)的話,ISP工具燒錄時(shí)最少擦除前8K。建議參考BLE文件夾下的OTA方案,將APP層代碼往前放,從4K開始放代碼,這樣在燒錄時(shí)必定被擦除一部分,提高安全性。

image.png


感謝您的回復(fù),我已經(jīng)將led程序(位于8K以上地址),的mstatus設(shè)置為了0x1888,但是依舊一直復(fù)位->加載->復(fù)位。


我在jump_app()(跳到8K地址去執(zhí)行)后面插入了一些打印代碼,它們不會(huì)被執(zhí)行,應(yīng)該是跳到8K去以后,出現(xiàn)了異常導(dǎo)致了復(fù)位。


兩個(gè)比較關(guān)鍵的點(diǎn):LD文件中,起始地址改成8K;.s文件做如上所述權(quán)限相關(guān)的改動(dòng)。

再有其他可能的話,可能是中斷相關(guān)問題。

如果jump_app前沒有調(diào)用中斷,那不存在該問題。如果jump_app前用到了各種中斷,那么在跳轉(zhuǎn)前需要先關(guān)閉所有中斷使能,包括獨(dú)立的中斷和總中斷,原因是中斷向量表會(huì)在運(yùn)行APP層代碼前,由.s文件重寫,但是中斷使能相關(guān)的寄存器是各個(gè)工程共用的。

如果是為了驗(yàn)證IAP功能是否正常,可以將備用flash代碼放到指定flash中,而非.data段的ram中,這樣測(cè)試是否為ram中的信息被篡改導(dǎo)致固件異常而復(fù)位。


謝謝


已解決


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频