【问题标题】:Two-dimensional array of character arrays PROGMEM Arduino字符数组 PROGMEM Arduino 的二维数组
【发布时间】:2013-04-01 04:22:14
【问题描述】:

我解决问题的第一个方法是尝试制作字典/哈希表,但有人告诉我这是个坏主意。我被发送到 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 个菜单屏幕和大量文本。)

【问题讨论】:

    标签: pointers multidimensional-array arduino


    【解决方案1】:

    您不必使用 `PROGMEM

    好吧,你真的不用PROGMEM。如果您现在想避免这种麻烦,只需从 dictionary 中删除 PROGMEM 属性并使用类似:

    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,但为什么不现在呢?

    【讨论】:

    • 谢谢!它工作得很好!完成项目后,我将编写一个程序,使用您提到的方法将表转换为 PROGMEM!
    • 酷!根据您为字符串表使用的内存空间量,您可能需要更早地完成此操作。密切注意可用的可用内存,一旦您降至 10% 以下 Arduinos/AVR 开始出现异常行为。如果您有奇怪的行为,这是首先要检查的。
    猜你喜欢
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 2019-01-23
    • 2017-02-19
    • 1970-01-01
    相关资源
    最近更新 更多