gpt4 book ai didi

c - 如何在 ROM 中存储常量 (Atmel)

转载 作者:行者123 更新时间:2023-11-30 19:37:20 24 4
gpt4 key购买 nike

美好的一天,

我正在使用 AtmelStudio 7 为 ATMega645A 编写固件。我正在启动一个本地化项目,需要在 16x2 字符显示屏上以 3 种不同的语言显示消息。现有的(英文消息)存储在 SRAM 中,但如果我必须将消息数量增加三倍,最终会溢出该数据存储空间。

所以,我试图将消息存储在空间充足的 ROM 中。问题是,Atmel 应用说明要么 (a) 错误,要么 (b) 不完整,因为我已根据他们的建议尝试了多种方法,但代码无法编译(引用:Atmel Tips & Tricks App Note doc8453.pdf 第 8 页和 http://www.atmel.com/webdoc/AVRLibcReferenceManual/FAQ_1faq_rom_array.html ) 。我的代码如下所示:

// before main(void)
#include <avr/pgmspace.h>
const char string_1[] PROGMEM = "String 1";
const char string_2[] PROGMEM = "String 2";
const char string_3[] PROGMEM = "String 3";
const char string_4[] PROGMEM = "String 4";
const char string_5[] PROGMEM = "String 5";

PGM_P string_table[5] PROGMEM =
{
string_1,
string_2,
string_3,
string_4,
string_5
};

在 main(void) 内我有以下内容:

char buffer[10];
PGM_P p;
int i;

memcpy_P(&p, &string_table[i], sizeof(PGM_P));
strcpy_P(buffer, p);

编译时,我收到一条消息:变量“string_table”必须是 const 才能通过“attribute((progmem))”放入只读部分

我尝试过使用“char”而不是“const char”,但似乎没有任何编译结果。任何有关将这些静态字符串存储在 ROM 中的正确语法的建议将不胜感激。

最佳答案

经过一整天的烦恼和多次尝试和错误尝试后,我得出了以下结论:

换行

`PGM_P string_table[5] PROGMEM =`

`PGM_P const string_table[5] PROGMEM =`

这似乎可以编译,我可以在显示器上显示字符串“buffer”的内容(“String 1”实际上是发送到显示器的内容)。我希望这能帮助那些在 ROM 中获取常量时遇到类似问题的其他人。

关于c - 如何在 ROM 中存储常量 (Atmel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39990163/

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