是否可以在类中使用 PROGMEME?Arduino的

Is it possible to use PROGMEM inside a Class? Arduino

提问人:Doku 提问时间:11/13/2023 最后编辑:Doku 更新时间:11/13/2023 访问量:25

问:

你能在课堂上使用 PROGMEM 吗? 我有一个设置布尔数组的类,

请注意 PROGMEN 属性。

#include <Arduino.h>

class Test
{
public:
  const bool PROGMEM a[130] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 1, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 1, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 1, 0, 0, 0, 0, 0, 0};
};


Test t;
void setup() {
  Serial.begin(9600);

  Serial.println((int) &t.a[3]);
  Serial.println(pgm_read_byte(t.a + 3));
  
}

void loop() {
  // put your main code here, to run repeatedly:
}

编译代码时,我遇到以下警告:

src\main.cpp:6:420: warning: '__progmem__' attribute ignored [-Wattributes]
   const byte PROGMEM a[130] = ...

在没有类上下文的情况下在我的 main.cpp 中使用 PROGMEM 时,一切正常。这可能是类的问题,还是其他原因导致了问题?

如果问题与类有关,其背后的原因是什么?应该是指向程序存储器的指针吗?如果是这样的话,应该只是一个整数 (bool*)?为什么在这一切中,类会带来问题?aa

Arduino Arduino-C++ flash-memory progmem

评论

2赞 tkausl 11/13/2023
Can you use PROGMEM in a class?不。Program-Memory 是静态内存,您不能动态分配程序内存,因此不可能将其作为实例变量。
0赞 Doku 11/13/2023
但是可以从应用程序写入程序存储器,不是吗?(即使这不是通常的用例。
0赞 tkausl 11/14/2023
据我所知没有。不过,我已经有一段时间没有用Arduino做任何事情了,我可能错了。但据我所知,Progmem 只能由引导加载程序编写。
0赞 Doku 11/14/2023
我做了一些研究,似乎可以在运行时从您的程序写入闪存,但对于我的用例来说,这太复杂了从应用程序写入闪存!是否可以标记为常量静态?导致类的所有对象共享相同的内存?@tkausla

答: 暂无答案