CH32V203 IAP 升級(jí) 雙image解決方案?

你好,目前遇到一個(gè)問題:


0 ~ 0x4000, 放bootloader 可以指定跳到0x4000 或者0xA000


0x4000 ~?0x9000?app bank0, size 0x5000.

0x9000 ~?0xE000?app bank1,?size 0x5000.

尾部剩余區(qū)域做 flash 配置 存儲(chǔ)。


啟動(dòng)后bootloader去判斷調(diào)用哪個(gè)bank。


現(xiàn)在問題來了,編譯app的時(shí)候,需要預(yù)設(shè) Ld 文件指定起始地址是0x4000。但是編譯出來的文件,放在0x9000 ~?0xE000?app bank1 卻無法啟動(dòng)。如果重新修改Ld的地址為0x9000,又不能用在bank 0.


所以,能不能建議一個(gè)通用的方案,讓相同的app.bin 既可以運(yùn)行在bank 0 又可以運(yùn)行在bank 1?


謝謝!



您好,請問一下,APP1和APP2兩個(gè)程序是一樣的么?按照我的理解,若程序中有兩個(gè)APP,在將這兩個(gè)APP固件寫入對定的區(qū)域后,你跳轉(zhuǎn)沒問題應(yīng)該都是可以運(yùn)行的。你是將APP1和APP2合為一個(gè)固件的?可以郵箱(lzs@wch.cn)具體和我溝通說一下你的需求,若是兩個(gè)APP都是一樣的,沒必要分兩個(gè)區(qū)域,或者說直接在APP程序中判斷執(zhí)行哪部分程序??梢脏]箱和我具體溝通一下。


@TECH62


我也遇到這個(gè)問題了。就是我boot+app1+app2。app1和app2的程序是類似的,可能有小的改動(dòng),但是基本一樣。


我最開始這樣設(shè)計(jì)是想,如果升級(jí)失敗,還有另一個(gè)APP可以運(yùn)行。如果升級(jí)成功,就設(shè)置選項(xiàng)字節(jié),下次上電的時(shí)候,boot能夠根據(jù)對應(yīng)的選項(xiàng)字節(jié),來切換運(yùn)行到對應(yīng)的app。


目前的問題就是我app根據(jù)鏈接文件里面設(shè)置了地址了,兩個(gè)app,有兩個(gè)地址。比如第一個(gè)版本在APP A的位置,第二版本在APP B的位置。但是一些設(shè)備可能跳過了某個(gè)版本。


我目前能想到的解決辦法就是,每出一版固件,生成兩個(gè)bin,一個(gè)LD地址是APP A的,一個(gè)LD地址是APP B的。然后上位機(jī)發(fā)請求和boot通信,目前設(shè)備上哪個(gè)的位置是當(dāng)前運(yùn)行的APP,哪個(gè)位置是之前運(yùn)行的APP,然后選擇合適的文件來更新。


不知道這么說是否清楚。


一樓和我,其實(shí)就是想問,能不能一個(gè)bin,不被LD文件里面的地址限制。


我覺得最主要的問題就是中斷向量表和數(shù)據(jù)的絕對定位問題。LD文件給定了Flash的起始位置,因此中斷向量表的重定位、指定閃存地址尋址的操作都會(huì)受到LD文件的影響。所以除非沒有這種從閃存讀數(shù)據(jù)(不用任何常量,甚至都是立即數(shù))的情況,也不用任何中斷(免表除外),不然想要在不同的偏移量上運(yùn)行可能還是很困難的。


-fPIC ?


樓上建議的-fPIC應(yīng)該可以?這樣的話只需要重定向中斷向量表即可。


您好,@winwin,感謝你的解釋說明,目前無法用一個(gè)bin,若兩個(gè)APP,都需要單獨(dú)編譯生成bin文件。關(guān)于4樓和5樓用戶討論的方法,目前沒有試過。


看了下,Mounriver GCC 的 multilib 并沒有納入 -fPIC 的選項(xiàng)。

那意味著所有的庫都需要重新編譯,那就很麻煩


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

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