[英]Saving functions arguments in array of structures
我是這個論壇的新手。 非常編程的經驗。 而且英語不是我的主要語言:)
我正在為微控制器編寫C代碼,現在我已經創建了具有結構數組的圖形菜單。 在此數組中,我定義了在按下按鈕(上,下,ENTER)的情況下的跳轉,菜單文本以及在按下按鈕的情況下的被調用函數(如果您位於正確的子菜單上,則可以調用函數)。
結構定義:
typedef const struct Menu_structure
{
const char *text;
unsigned char Menu_points;
unsigned char Menu_button_UP;
unsigned char Menu_button_DOWN;
unsigned char Menu_button_ENTER;
Menu_Waveform_parameter_t Waveform_parameter_value;
void (*Menu_function_UP) ();
void (*Menu_function_DOWN) ();
void (*Menu_function_ENTER) ();
} MenuEntry;
1:菜單菜單,2:當前子菜單的大小(用於刷新),3:UP時跳轉,4:向下時跳轉,5:輸入時跳轉,6:參數枚舉,7:該函數在按下按鈕的情況下被調用。
數組示例:
MenuEntry menu[] =
{
{menu_01, 5, 0, 0, 0, 0, 0, 0, 0},
{menu_02, 5, 1, 2, 1, 0, 0, 0, funtion_0},
{menu_03, 5, 1, 3, 6, 0, 0, 0, 0},
{menu_04, 5, 2, 4, 11, 0, 0, 0, 0},
{menu_05, 5, 3, 4, 1, 0, 0, 0, funtion_1},
}
調用功能代碼(按下輸入按鈕)
case Button_ENTER: if (menu[Menu_selected].Menu_function_ENTER != 0)
{
menu[Menu_selected].Menu_function_ENTER();
}
break;
一切正常。 問題是我的菜單很長。 這意味着我將需要很多不同的功能(其中一些功能可以與參數的使用結合使用)。
我的問題來了。 如何將常數參數保存在結構數組中。 有什么建議么。 謝謝。
為了滿足您的要求,我首先建議至少從用戶界面的角度出發,從C語言過渡到更高級的語言。 (其余的低級內容可以保留在C中。)如今,即使在嵌入式系統中,您也可以找到高級語言,並具有與C接口的功能。
但是讓我猜測,這不是您的選擇。
因此,為了完成您要完成的任務,我建議的第二件事是使用被稱為預處理器宏的C語言這一可怕的技巧 。
在C中,您可以這樣定義一個宏:
#define MYMACRO(a,b,c,d,e,i) { a, b, c, d, e, 0, 0, 0, i }
因此,您的表如下所示:
{
MYMACRO( menu_01, 5, 0, 0, 0, 0},
MYMACRO( menu_02, 5, 1, 2, 1, funtion_0},
MYMACRO( menu_03, 5, 1, 3, 6, 0},
MYMACRO( menu_04, 5, 2, 4, 11, 0},
MYMACRO( menu_05, 5, 3, 4, 1, funtion_1},
}
當然,您可以使用不同的參數定義各種不同的MYMACRO
版本,擴展為使用不同的常量,等等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.