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