(这是该问题的后续内容)
以下程序无法运行(在ATmega4809
)
#include <avr/io.h>
void f(const char str[])
{
if (str[0] == 'a') // <-- here is the problem. The program thinks that str[0] != 'a'
PORTC.OUT |= PIN0_bm;
else
PORTC.OUT &= ~PIN0_bm;
}
const char str[] = "abc"; // this string the compiler stores in the .rodata section
int main()
{
PORTC.DIR |= PIN0_bm;
while (1) { f(str); }
}
问题是编译器str
在该.rodata
部分中写入。
str
如果我改变强制编译器将其写入部分中的定义 .data
:
const char str[] __attribute__((section(".data"))) = "abc";
该程序有效。
(您可以在我之前的问题中看到所有详细信息)
我的问题是:
我怎样才能强制编译器将所有 const 字符串写入该
.data
部分以使我的程序能够正常工作?这是
avr-gcc
13.3.0 中的一个错误吗?