簡體   English   中英

將函數參數保存在結構數組中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM