MounRiver中變量定位問題

由于從F轉(zhuǎn)到V,keil變?yōu)镸ounRiver,用gcc編譯器。原先keil中的定位語句無法使用了。

1、keil在地址0x08005400位置定位一個變量用于存放程序版本號:

#define?FW_APPVERSION_BASE? ??0x08005400

const uint16_t FW_wAppVersion __attribute__((at(FW_APPVERSION_BASE))) = VERSION_APP;


改成MounRiver不能這么寫了,按照gcc方法改為:

const uint16_t FW_wAppVersion __attribute__((section (".myBufSection"))) = VERSION_APP;

然后在連接文件.ld的section段中增加下面紅色部分,這樣做對嗎?好像跑起來程序有問題:

SECTIONS

{

.init :

{

_sinit = .;

. = ALIGN(4);

KEEP(*(SORT_NONE(.init)))

. = ALIGN(4);

_einit = .;

} >FLASH AT>FLASH


/* placing my named section at given address: */

? .myBufBlock 0x00005400 :

? {

? ? KEEP(*(.myBufSection)) /* keep my variable even if not referenced */

? } >FLASH AT>FLASH


image.png

你好,可按照上圖定義,代碼如下:

.flag?:
???{
??
?? .?=?ORIGIN(FLASH)?+?0x800;
??
KEEP(*(SORT_NONE(.myBufSection)))
??
??}>FLASH?AT>FLASH


測試如下:

定義了一個dat_test變量,放在0x800位置。

image.png

image.png


增加了后鏈接出錯了,不知如何處理。

make -j4 all?

d:/mounriver/mounriver_studio/toolchain/risc-v embedded gcc/bin/../lib/gcc/riscv-none-embed/8.2.0/../../../../riscv-none-embed/bin/ld.exe:.ld:1: syntax error

collect2.exe: error: ld returned 1 exit status

E(OFN4YVLPSH)FPKI62VW7M.png


icon_rar.giftest.zip

附件是我的測試例程,你參考一下。


謝謝,搞定了,是我傻了,拷貝的時候等號=前面的一個·點忘記拷貝了。


另外有個問題:

我程序有2個常量(uint32_t)在Flash中絕對定位,且兩個地址相距比較遠,大概有12K左右。用這種方法做的絕對定位,中間12K鏈接程序直接給你全空了,沒有放代碼進去,等于這12K白白浪費掉了,剩下空間又不夠。KEIL MDK就不會有這情況,C中用at指令絕對定位后,常量與代碼可以混合在一起。


所以兩個地址都建議靠前且相距不遠,減少浪費。



有沒有什么好的方法,能像KEIL中那樣的絕對定位常量與代碼混合的。再去改絕對地址定位上位機配套工具全部都得更新。



image.png

可通過上述方式以相關(guān).c文件填充,例如我使用debug.c來填充,效果如下圖:

image.png

在我定義的0x0800到0x1600之間存放了debug.c中的相關(guān)函數(shù)。


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

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