gpt4 book ai didi

pointers - 二维字符数组 PROGMEM Arduino

转载 作者:行者123 更新时间:2023-12-04 05:04:11 26 4
gpt4 key购买 nike

我解决问题的第一种方法是尝试制作字典/哈希表,但有人告诉我这是一个坏主意。我被发送到 PROGMEM .现在我的问题是我正在使用触摸屏制作菜单系统。我需要每个按钮都可以使用不同的语言,所以有一个存储当前语言的内存位置,0 - 英语,1 - 西类牙语,2 - 法语。当我打开系统时,它会将这个值读入一个名为 lang 的字符/字节变量中。 .

我希望我的代码像这样工作(其中 LANG_SOUND 是一个常数值 7):

const char* dictionary[3][8] PROGMEM = {
{"Account", "Date and Time", "Idle", "Language", "Main Menu", "Prescription", "Settings", "Sound"},
{"Cuenta", "Fecha y Hora", "Espera", "Idioma", "Menú Principal", "Receta", "Configuración", "Sonido"},
{"Compte", "Date et heure", "Idle", "Langue", "Main Menu", "prescription", "Paramètres", "Son"}
};

strcpy_P(buffer, (char*) pgm_read_word (&(dictionary[lang][LANG_SOUND])));
screen.print(buffer, CENTER, 23);

我上面提到的 PROGMEM 页面创建的字典略有不同。我现在的问题是上面的代码不起作用。可能 8 不是用于 8 个字符串元素,而是每个字符串最多 8 个字符,我不确定我是否把指针搞砸了一点。

那么,上面的问题是什么,我该如何解决?此外,我必须按照链接中显示的方式创建字典/字符串表,还是可以像上面那样做? (我上面做的方式对我来说似乎更容易,因为我最终将拥有大约 40 个菜单屏幕和大量文本。)

最佳答案

你不必使用`PROGMEM
嗯,你真的不会用PROGMEM .如果您现在想避免这种麻烦,只需删除 PROGMEM属性来自 dictionary并使用类似的东西:

screen.print(dictionary[lang][LANG_SOUND], CENTER, 23);
但是,如果你有很多这样的数据,你可能需要使用 PROGMEM .但是,如果您想立即开发应用程序的其他部分,只需忽略 PROGMEM现在的部分。
使用 PROGMEM不幸的是,您必须使用 PROGMEM几乎和那个例子一样,即为每个 PROGMEM 声明一个唯一的变量字符串。您不必将表存储在 PROGMEM 中虽然。但是像这样的行:
prog_char dictEnglishSalami[] PROGMEM = "Salami";
prog_char dictEnglishProsecco[] PROGMEM = "Prosecco";
将需要。 dictionary看起来像的表
const char *string_table[] = {
dictEnglishSalami,
dictEnglishProsecco,
...
};
可以申报 PROGMEM或不,但为什么在这一点上不呢?

关于pointers - 二维字符数组 PROGMEM Arduino,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15737583/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com