如何解决访问没有特殊功能的 PROGMEM 变量仍然有效
在 Arduino site 上,据说您可以使用关键字 PROGMEM
将变量存储到 FLASh 而不是 RAM。
然后,当您想访问它时,您需要使用 pgmspace.h
中的特殊方法,例如,要读取一个浮点数,您需要使用 pgm_read_float_near(address_short) __LPM_float((uint16_t)(address_short))
。
那为什么当我不使用这个功能时,一切仍然正常?
const PROGMEM float floatSet[] = { 15.18,32.15,0.099,10,55.89};
const int arraySize = 5;
void printNumber(const float param[],int size) {
for (int i = 0; i < size; i++) {
Serial.println(param[i]);
}
}
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
Serial.begin(115200);
delay(1000);
printNumber(floatSet,arraySize);
}
// the loop function runs over and over again forever
void loop() {}
这是控制台输出:
15.18
32.15
0.10
10.00
55.89
我猜当我像这样使用它时,整个内容都被移动到 RAM 中,我是否在数组之前放置关键字 PROGMEM 都没有关系。
你能告诉我为什么它有效吗? PROGMEM
是访问单个值的唯一选项吗?如果是这样,那么为什么建议使用 F()
宏来存储字符串?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。