微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

访问没有特殊功能的 PROGMEM 变量仍然有效

如何解决访问没有特殊功能的 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 举报,一经查实,本站将立刻删除。