我正在嘗試爲瑞薩M16 cpu使用KPIT gcc。編譯器將指針限制爲16位,因此所有字符串在啓動時從ROM複製到RAM。這填充我的RAM。該芯片在第一個64K中有一些數據ROM可用,如果我可以讓編譯器將字符串放在那裏,那麼可以通過小指針尋址。我找不到編譯器開關來控制串的位置,所以我嘗試了以下內容:KPIT GCC將文本字符串分配到特定的鏈接器部分
static const char fmt[] __attribute__ ((section ("nrodata")));
static const char fmt[]="Hello World";
這似乎如果放置在文件中的外部功能工作。但是,在一個函數內,相同的代碼會給出錯誤:「對於第一行,」存儲大小'fmt'未知「。 我希望它在功能工作的原因是,我在考慮換所有的printf()調用像宏:
#define PRINTF(fmt,args...) do { \
static const char _fmt_[] __attribute__ ((section ("nrodata"))); \
static const char _fmt_[]=#fmt; \
printf(_fmt_ , ##args); \
} while (0)
得到的字符串到正確的部分。
有誰知道我可以如何將字符串放入特定的部分?
CPU有1兆的地址空間。編譯器應該處理該地址空間內的任何地址。所以不需要將文字移動到數據ROM之外。我強烈建議使用makefile,以便正確編譯所有內容並使用鏈接器命令文件,以便所有數據類型(代碼,文字,中斷表等)都位於內存映射中的正確位置。 – user3629249