传递给函数的指针

时间:2016-10-06 20:33:14

标签: arduino

我正在使用Arduino IDE编写草图,将progmem中保存的数据传递给函数,然后该函数将progmem数据写入本地数组。 代码如下:

authors

当我指定const uint8_t Data_3 [256] PROGMEM = {0x11, 0x39.....} void setup() { Serial.begin(57600); Data(Data_3, 0x00, 256); } void loop() { } void Data(const uint8_t *data, uint8_t bank, uint16_t bytes) { uint8_t buff1 [256]; buff1[0] = data[0]; Serial.println(buff1[0],HEX); // <--Works fine prints the correct value for ( uint16_t x = 0; x < bytes + 1; x++ ) { buff1[x] = data[x]; Serial.println(buff1[x],HEX); // <--Just prints garbage } } 并打印结果时答案是正确的。当我使用buff1[0] = data[0]循环打印函数时,我只是得到了垃圾。有谁知道这个的原因?

1 个答案:

答案 0 :(得分:1)

你必须使用#include <avr/pgmspace.h>Serial.print(pgm_read_byte(data+x));,否则它会尝试从同一地址获取数据,但是来自RAM,而不是来自闪存。

或通过memcpy_P(buff, data, bytes);

复制到缓冲区