- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
美好的一天,
我正在使用 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/
我是一名优秀的程序员,十分优秀!