私はこれを持っています:
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 倍にします...
メニューの行の「定義」をソースコード内のオールインワン行に保ちながら、どうにかしてこれを機能させるにはどうすればよいですか?