MounRiverStudio 如何將變量放在flash的指定位置

如題,自己制做bootloader,需要在app代碼區(qū)域的指定位置放一個變量,用于指示bootloader目前是處理升級模式,還是處理正常運(yùn)行模式。使用keil比較方便,const boot_info_t boot_info __attribute__((at(0x80000400))),就能將boot_info固定在0x80000400的flash中。

請教MounRiverStudio中要如何處理,最好變量能放在app代碼區(qū)域,這樣制作升級程序、燒錄和升級判斷比較方便。

您好,變量一般放在RAM,關(guān)于將變量放在RAM指定位置,可以參考一下下帖介紹

https://www.cnblogs.com/liaigu/p/17319352.html



你好,數(shù)據(jù)確定是放在指定位置了,但是想要訪問或者修改,編譯不通過,提示overlaps


您好,不好意思,沒注意,變量一般是放在RAM里的,我發(fā)你的鏈接是將常量之類的放在FLASH當(dāng)中的,變量一般是在RAM中的,可將變量放在指定RAM地址,可參考下鏈接配置介紹:

https://www.cnblogs.com/liaigu/p/17319352.html

?


你理解的沒錯,是將常量放在flash中的,不是放在RAM中;但是放在flash中,應(yīng)該也可以訪問,通過flash操作函數(shù),也可以修改才對。比如升級程序的時候,就是直接對flash進(jìn)行操作。按照你給的鏈接,常量確實放在flash中了,但是在程序中訪問不了。


您好,若你要將變量的值保存在FLASH某個位置,可以直接通過FLASH編程將其寫在某個位置,然后直接讀取FLASH該地址獲取對應(yīng)的值。關(guān)于FLASH的編程操作,可以參考EVT的FLASH操作例程。后續(xù)若有問題,可通過郵箱(lzs@wch.cn)進(jìn)行溝通。


這個最正規(guī)的操作是寫自己的Linker Script。

但你要考慮Flash是頁擦除而不是字節(jié)擦除的,對變量的位置存放要自己當(dāng)心的。

像你所說的Keil,編譯器可不會關(guān)心頁邊界在哪里。


回復(fù)6樓

有的初始值,在編譯的時候就希望確定下來的,并不是程序運(yùn)行之后才去讀寫的;比如我在程序的某個位置,加入自己板子的名稱和板號,在升級的時候,升級軟件直接在指定位置讀取信息,判斷這個bin文件是否與設(shè)備匹配,防止下載了不匹配的文件。


回復(fù)7樓

確實是需要修改ld文件,但是對MounRiverStudio不是太熟悉,不知道怎么修改。按照前面提供的一些方法,達(dá)不到需要的效果。

至于寫的問題,大多東西不需要修改,其中一個標(biāo)志需要修改,我默認(rèn)給它0xFFFFFFFF;修改的時候,直接寫0,或者修改為0xF0F0F0F0之類的,就不需要重新擦除了。


您好,你可以參考附件工程試一下

icon_rar.gifCH32V307.zipimage.png


感謝回復(fù),用你這種方式需要占用一個頁,讀寫數(shù)據(jù)才不會影響程序,我最終也是使用這樣方式了。

WCH的支持還是不錯的,謝謝


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

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