繁体   English   中英

avr-gcc在PROGMEM中未看到“ const”修饰符

[英]avr-gcc not seeing “const” modifier with PROGMEM

我有一个像这样的文件:

#include <avr/io.h>
#include <avr/pgmspace.h>

const PROGMEM char* str = "Hello UART!\r\n";

我正在尝试使用Makefile进行编译,这是最终命令:

avr-gcc -std=gnu99 -mmcu=atmega328p -DF_CPU=16000000UL -I. -Ilib/
    -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
    -Wall -Wno-main -Wno-strict-prototypes -Wno-comment -g2 -Wextra
    -Wfatal-errors -Wno-unused-but-set-variable -ffunction-sections
    -fdata-sections -Wl,--gc-sections -Wl,--relax -Os main.c lib/uart.c
    --output main.elf

我收到以下错误:

main.c:9:21: error: variable 'str' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
 const PROGMEM char* str = "Hello UART!\r\n";
                     ^
compilation terminated due to -Wfatal-errors.
Makefile:71: recipe for target 'main.elf' failed
make: *** [main.elf] Error 1

我的代码有什么问题?

我尝试在声明的各个位置移动PROGMEM关键字,而没有进行任何更改。

const char str[] PROGMEM = "Hello UART!\r\n";

应该管用。 您正在创建指向const数据的非const指针。

您的代码声明了一个指向const char (n个数组)的非const指针。 也就是说,编译器完全正确,变量str是非const ,声明为const就是它指向的东西。 如果您希望指针和指向数组都为const ,那就是这样:

const PROGMEM char* const str = "Hello UART!\r\n";

或等效地,这:

PROGMEM char const * const str = "Hello UART!\r\n";

这两个意思彼此完全相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM