gpt4 book ai didi

c - KPIT GCC 将文本字符串分配给特定的链接器部分

转载 作者:太空宇宙 更新时间:2023-11-03 23:24:05 26 4
gpt4 key购买 nike

我正在尝试将 KPIT gcc 用于 Renesas M16 cpu。编译器将指针限制为 16 位,因此所有字符串在启动时都从 ROM 复制到 RAM。这填满了我的内存。该芯片在前 64K 中有一些可用的数据 ROM,如果我能让编译器将字符串放在那里,这将可以通过小指针寻址。我找不到控制字符串位置的编译器开关,所以我尝试了以下操作:

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)

将字符串放入正确的部分。

有谁知道如何将字符串放入特定部分?

最佳答案

基于GCC documentation您应该能够在与变量定义相同的行中指定属性,例如:

static const char __attribute__ ((section ("nrodata"))) fmt[]="Hello World";

它确实说您只能对全局变量执行此操作,但看起来像您的示例代码一样可以对静态变量执行此操作。 (我没有你的编译器,所以我不能实际尝试)

关于c - KPIT GCC 将文本字符串分配给特定的链接器部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31528813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com