在使用PROGMEM时,应该避免使用malloc()函数。因为malloc()函数是在动态内存上分配内存,而PROGMEM是在静态内存上存储数据。因此,使用malloc()函数可能会导致内存分配冲突。正确的做法是使用编译器提供的PROGMEM库函数例如pgm_read_byte,pgm_read_word等来访问PROGMEM数据。例如:
// 将字符串存储在PROGMEM中 const char myString[] PROGMEM = "Hello World!";
void setup() { // 从PROGMEM中读取并打印字符串 Serial.begin(9600); Serial.println((const __FlashStringHelper*) myString); }
void loop() { // empty }
在上面的代码中,使用了const char myString[] PROGMEM来声明一个存储在PROGMEM中的字符串。在setup()函数中,可以使用Serial.println()函数从PROGMEM中读取并打印字符串。注意到使用了类型转换(const __FlashStringHelper*)以确保正确从PROGMEM中读取字符串。
通过这种方式,可以避免使用malloc()函数从动态内存中分配内存,从而避免引发异常问题。