CH32V203 IAP問題 程序從APP中復(fù)位,為啥沒有從boot開始運(yùn)行

我的 BOOT起始從?0x0800 0000? ~~? 0x08002800

? ? ? ? APP? ?從? 0x08002800? ~~? 0x08008C00?

? ? ? ? updata 從 0x08008C00? ~~? 0x0800F000

當(dāng)我的 程序從BOOT跳轉(zhuǎn)到APP中運(yùn)行 ,我在APP中接收更新文件放到updata,使用NVIC_SystemReset()復(fù)位,為啥程序沒有重新從boot開始運(yùn)行,而是還是重新從APP區(qū)開始運(yùn)行程序,這是什么原因呢,請大佬答疑解惑

您好,


????????從您描述的地址上看,應(yīng)該是自己實(shí)現(xiàn)了一個boot,使用軟件復(fù)位,在系統(tǒng)初始化后,會從用戶區(qū)的首地址開始執(zhí)行,也就是您自己實(shí)現(xiàn)的boot功能。


????????您在boot中使用了什么方式判斷停留在該區(qū)域還是跳轉(zhuǎn)至用戶區(qū)(或其他功能)呢?排查這個問題最簡單的方法是通過串口打印觀察軟件的運(yùn)行,在進(jìn)入不同的區(qū)域后,立即輸出標(biāo)志位信息與當(dāng)前所處的區(qū)域。當(dāng)然,也可以通過仿真的方式進(jìn)行排查,具體方法可以參考鏈接中的博客。https://blog.csdn.net/qq_36353650/article/details/127403408?spm=1001.2014.3001.5501





是的,我在APP中更新完程序后,重啟在BOOT讀取BIN文件的前8個字節(jié),我在STM32中會?

這樣判斷一下我的更新文件的程序指針和堆棧指針

if ((tmp32 & 0xffff0000) != 0x20000000)? ?//前面4字節(jié)為堆棧指針

? ? {

//? ? ? ? printf("堆棧指針不在RAM內(nèi)");

? ? ? ? USART_SendByte(USART1,0x06);

? ? ? ? return 1;

? ? }


? ? tmp32 = *(uint32_t*)&out[4];

? ? if ((tmp32 & 0xfffc0000) != 0x08000000)

? ? {

//? ? ? ? printf("程序指針不在FLASH內(nèi)");

? ? ? ? USART_SendByte(USART1,0x07);

? ? ? ? return 1;

? ? }

但是CH32V203我看生成的BIN文件前面8個字節(jié),好像并不是程序指針和堆棧指針,所以我就這樣判斷,我看啟動文件

.word 0x00000013

.word 0x00000013

.word 0x00000013

.word 0x00000013

.word 0x00000013

.word 0x00000013

.word 0x00000013

.word 0x00000013

.word 0x00000013

.word 0x00000013

.word 0x00000013

.word 0x00000013

.word 0x00100073

我就判斷這些開頭

tmp32 = *(uint32_t*)&out[4];? (BIN文件的 4-8位)? ?

? ? if ((tmp32 & 0x000000ff) != 0x00000013)? ? ? ? ?//判斷程序指針是否在FLASH中

? ? {

? ? ? ? return 2;

? ? }

再判斷

? ? if ((tmp32 & 0x000000ff) != 0x00000013)? ? ? ? ?//判斷文件最后兩位特征值

? ? {

? ? ? ? return 3;

? ? }

? ? tmp32 = *(uint32_t*)&out[4];

? ? if ((tmp32 & 0x000000ff) != 0x00000073)? ? ??

? ? {

? ? ? ? return 4;

? ? }



程序就從這里跳出了,重新回到APP區(qū)開始執(zhí)行,所以我如果想判斷程序指針和堆棧指針應(yīng)該怎么辦



您好,


????????V203的內(nèi)核為RISC-V,編譯結(jié)束后的bin可能與ST的會有些差別,建議您在Flash中存儲一個標(biāo)志位,當(dāng)標(biāo)志位變化時再動作,您也可以考慮講該標(biāo)志存儲在用戶選擇字中,防止在操作Flash時誤擦除。

image.png





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

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