在 PROGMEM 中为 arduino UNO 连接字符串
Concatenating strings in PROGMEM for arduino UNO
我正在尝试创建一个波形文件名称列表 soundList 以通过 arduino UNO 上的 adafruit WAV 屏蔽播放。由于这些文件名永远不会改变,而且我 运行 不在 sRam 中,我想将它们存储在 PROGMEM 中,但出现错误:
invalid operands of types 'const char*' and 'const char [5]'
to binary 'operator+'
我不能在 PROGMEM 中连接字符串吗?我不明白为什么。
for (int i = 1; i < 19; ++i)
{
const char soundList[i] PROGMEM = "Track" + i + ".WAV";
return soundList;
}
我也很难从 soundList 中读取波形文件?
pgm_read_word(&(soundList[i])));
有什么妙语吗?
一个for
循环是一个运行时操作。您不能执行分配给 PROGMEM
变量的运行时操作,因为该变量将存储在闪存中(在运行时只读)。
但由于唯一的可变部分是数字,将其他两部分存储在闪存中并在运行时创建文件名。
#define FILEPREFIXLEN 5
char fileprefix[] PROGMEM = "Track";
#define FILESUFFIXLEN 4
char filesuffix[] PROGMEM = ".WAV";
#define FILEMIDLEN 2
...
char filename[FILEPREFIXLEN + FILEMIDLEN + FILESUFFIXLEN + 1];
// Read fileprefix into filename, append number, append filesuffix
我正在尝试创建一个波形文件名称列表 soundList 以通过 arduino UNO 上的 adafruit WAV 屏蔽播放。由于这些文件名永远不会改变,而且我 运行 不在 sRam 中,我想将它们存储在 PROGMEM 中,但出现错误:
invalid operands of types 'const char*' and 'const char [5]'
to binary 'operator+'
我不能在 PROGMEM 中连接字符串吗?我不明白为什么。
for (int i = 1; i < 19; ++i)
{
const char soundList[i] PROGMEM = "Track" + i + ".WAV";
return soundList;
}
我也很难从 soundList 中读取波形文件?
pgm_read_word(&(soundList[i])));
有什么妙语吗?
一个for
循环是一个运行时操作。您不能执行分配给 PROGMEM
变量的运行时操作,因为该变量将存储在闪存中(在运行时只读)。
但由于唯一的可变部分是数字,将其他两部分存储在闪存中并在运行时创建文件名。
#define FILEPREFIXLEN 5
char fileprefix[] PROGMEM = "Track";
#define FILESUFFIXLEN 4
char filesuffix[] PROGMEM = ".WAV";
#define FILEMIDLEN 2
...
char filename[FILEPREFIXLEN + FILEMIDLEN + FILESUFFIXLEN + 1];
// Read fileprefix into filename, append number, append filesuffix