0

私はこれを持っています:

typedef struct menu_item_def {
  byte x; byte y;        // Coordinates of the start for the line of test
  byte selected;         // set to 1 if the menu buttons have this option selected
  char *mtext;           // What to say, including sprintf placeholders:  eg: "STOP TIMER...% 4.2i MIN"
  byte mdatatype1;       // 0 means this is actual data to print.  1 means go call the supplied function to get the data when needed.
  void *mdata1;          // Where to get any data from for the menu (upto 2 different bits allowed per line)
} menu_item_type;

そして、これ:-

struct menu_item_def sub_menu_items[MAX_MENU_LINES] = {
  {1,2,0, "MOTOR RPM.....% 5.1i RPM"  ,0,(void *)8500,0,0},
  {1,2,1, "ALARM MAX....% 5.2f Lt/Hr" ,0,(void *)85,0,0},
  {1,2,0, "ALARM MIN.... %s"          ,2,(void *)"ON/OFF",0,0},
};

したがって、後でメニューを次のような関数に渡すことができます。

  Menu(sub_menu_items);

それをすべて FLASH に移動するにはどうすればよいですか?

私はものの山を組み合わせてみましたが、この厄介なクラッジを除いて、「グローバル変数は688バイト(33%)を使用しています」というメッセージを減らすものはありません:

const char string_0[] PROGMEM = "STOP TIMER....% 5.1i MIN"; 
struct  menu_item_def main_menu_items[MAX_MENU_LINES] = {
    { 1,2,0, (char *)string_0  ,0, (void *)83,0,0 },
    { 1,2,1, "CHEM RATE...% 5.2i Lt/Hr" ,1, (void *)DemoData,0,0 },
    { 1,2,0, "CHEM PUMP....... %s"          ,2, (void *)"ON/OFF",0,0 },
};

これは、読み取り可能なメニューをソースにコーディングする私の能力を破壊し、途中ですべてのメニュー作業を 3 倍にします...

メニューの行の「定義」をソースコード内のオールインワン行に保ちながら、どうにかしてこれを機能させるにはどうすればよいですか?

4

2 に答える 2