当前位置:首页 > 嵌入式 > 嵌入式云IOT技术圈
[导读]一般来说我们的产品都有按键,按键用来操作相应的界面,那就会有相应的界面处理方法,有两种结构的编写。


微信公众号:嵌入式开发圈
关注可了解更多的教程。问题或建议,请公众号留言;
如果你觉得本文对你有帮助,欢迎赞赏

由于之前的文章没有好看的格式,故现在重新发表,让圈友看起来更加舒服,也可以直接复制粘贴商用。

▲长按图片保存可分享至朋友圈


    一般来说我们的产品都有按键,按键用来操作相应的界面,那就会有相应的界面处理方法,以下有两种结构的编写

A类编写

 1//针对左键的处理函数,传入的参数为当前页面
2void left_key_process(int current_page)
3
{
4    switch(current_page)
5    {
6        case MAIN_PAGE:
7            //针对main_page的左键处理
8             main_page_left_key_process();
9            break ;
10        case SETTING_PAGE:
11            //针对setting_page的左键处理
12            setting_page_left_key_process();
13             break ;
14        case LOG_PAGE:
15            //针对log_page的左键处理
16            log_page_left_key_process();
17            break ;
18        case LANGUAGE_PAGE: 
19            //针对language_page的左键处理
20            language_page_left_key_process();
21            break ;
22             ....
23    }
24}
25
26//针对右键的处理函数,传入的参数为当前页面
27void right_key_process(int current_page)
28
{
29    //....
30}
31//针对确认键的处理函数,传入的参数为当前页面 
32void enter_key_process(int current_page)
33
{
34    //....
35}
36//UI页面处理函数,传入的参数为当前的键值
37void UI_Page_Process(int KeyValue)
38
{
39    switch(KeyValue)
40    {
41        case LEFT_KEY :
42             left_key_process(KeyValue);
43             break ;
44
45        case RIGHT_KEY:
46             right_key_process(KeyValue);
47             break ;
48        case ENTER_KEY:
49             enter_key_process(KeyValue);
50             break ;
51        ...
52    }
53}

    

    A类编写,我可以起个名字叫直男式编写,逻辑没有错,也能正常操作相应的页面,没有问题,可它就是一条线,直! 首先拿到键值,然后操作界面,和我们正常人的思维差不多。但如果代码量剧增,页面众多,每个页面有不同的处理按键,相信A类的编写给后面的人来维护或者增加处理方法人一定会非常抱怨,为啥找个界面处理这么痛苦?

    我们再来看看B类,我可以起个名字叫人机接口式编写。首先我们要操作界面,界面就是人机接口,每个不同的界面由对应的按键操作方法,这样看起来,是不是更好维护了?以后,我要往界面添加、删除等相关按键的处理方法,那是不是就更好找了?

B类编写

 1//主页面处理
2void main_page_process(int KeyValue)
3
{
4    switch(KeyValue)
5    {
6        case LEFT_KEY:
7             //针对main_page的左键处理
8             break ;
9        case RIGHT_KEY:
10             //针对main_page的右键处理
11             break ;
12        case ENTER_KEY:
13             //针对main_page的Enter键处理
14             break ;
15        case BACK_KEY:
16             //针对main_page的back键处理
17             break ;
18        ...
19    }
20}
21//设置页面处理 
22void setting_page_process(int KeyValue)
23
{
24    switch(KeyValue)
25    {
26        case LEFT_KEY:
27             ...
28             break ;
29        case RIGHT_KEY:
30             ...
31             break ;
32        case ENTER_KEY:
33             ...
34             break ;
35        case BACK_KEY:
36             ...
37             break ;
38        ...
39    }
40}
41//记录页面处理 
42void Log_page_process(int KeyValue)
43
{
44    switch(KeyValue)
45    {
46        case LEFT_KEY:
47             ...
48             break ;
49        case RIGHT_KEY:
50             ...
51             break ;
52        case ENTER_KEY:
53             ...
54             break ;
55        case BACK_KEY:
56             ...
57             break ;
58        ...
59    }
60}
61//UI主页面处理 ,传入键值
62void UI_Page_Process(int KeyValue)
63
{
64
65    switch(current_page)
66    {
67        case MAIN_PAGE:
68             main_page_process(KeyValue);
69             break ;
70        case SETTING_PAGE:
71             setting_page_process(KeyValue);
72             break ;
73        case LOG_PAGE:
74             Log_page_process(KeyValue);
75             break ;
76        ....
77    }
78}

    虽然说B类看起来更加的易维护,但仍然存在缺陷,那就是一旦菜单项数变多以后,就存在效率低下的问题了,我们有一种更好的解决方法函数跳转表,我们将B类的方式改一下,引入C类编写。

C类编写

 1#include 
2#include 
3using namespace std ;
4#define NR(x) (sizeof(x)/sizeof(x[0]))
5
6int main_page_process();
7int detect_page_process();
8int log_page_process();
9int setting_page_process();
10
11//菜单枚举 
12typedef enum
13{
14    MAIN_PAGE = 0,
15    DETECT_PAGE,
16    LOG_PAGE,
17    SETTING_PAGE
18}MENU_INDEX;
19
20typedef int(*OPERATE_FUNC)();
21
22class MENU
23{

24    public:
25    MENU_INDEX index ;     //菜单索引
26    OPERATE_FUNC op_func ; //菜单对应的函数
27};
28
29//构造函数跳转表
30static MENU OP_MENU_STRUCT[] = 
31{
32    {MAIN_PAGE   ,  main_page_process},
33    {DETECT_PAGE ,  detect_page_process},
34    {LOG_PAGE    ,  log_page_process},
35    {SETTING_PAGE,  setting_page_process},
36};
37
38int Goto_execute(int op)
39
{
40    if(op >= NR(OP_MENU_STRUCT) || op < 0)
41        return -1 ;
42    //根据索引值op,调用相应的函数
43    return OP_MENU_STRUCT[op].op_func();
44}
45
46int main(int argc , char **argv)
47
{
48    char ch ;
49    int menu_index = 0;
50    while(1)
51    {
52        ch = getch();
53        if(ch == 'a')     //左键 
54           menu_index > 0 ? menu_index-- : menu_index = 0 ;
55        else if(ch == 'd')//右键 
56           menu_index < NR(OP_MENU_STRUCT) ? menu_index++ : menu_index = NR(OP_MENU_STRUCT);
57        //执行菜单操作 
58        Goto_execute(menu_index);
59    }
60    return 0 ;
61
62
63int main_page_process()
64
{
65    cout << "主页面" << endl ;
66}
67
68int detect_page_process()
69
{
70    cout << "检测页面" << endl ; 
71}
72
73int log_page_process()
74
{
75    cout << "记录页面" << endl ;
76}
77
78int setting_page_process()
79
{
80    cout << "设置页面" << endl ;
81}

    如果圈友有什么更好的应用框架,欢迎留言推荐,一起共同学习! 

    另外推荐一部近期出的典型巨作,冬瓜哥的大话计算机,可以说是一部经典了,虽然贵,但我也入手了一部,看了第一章,基本上我觉得可以秒杀国产同类书籍了,甚至可以类比国外的一些经典书籍,强烈推荐入手! 


另外推荐相关课程:

  韦东山老师优质嵌入式学习干货推荐:包括ARM裸机开发、Linux设备驱动程序、Linux应用程序开发、Android系统学习、Linux设备树等。


在我这里购买韦东山老师的课程还可得到本人的技术支持,手把手带你学习嵌入式!

王争老师优秀数据结构算法学习课程推荐


免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

重庆 2025年10月30日 /美通社/ -- 2025年10月23日,中德智能制造科技创新合作论坛暨联盟年度大会在重庆隆重召开,来自中德两国智能制造领域的300余...

关键字: 智能制造 AI BSP 编写

北京2025年2月28日 /美通社/ -- 日前,《服务器操作系统迁移指南》(以下简称《指南》)经中国电子工业标准化技术协会批准后正式发布,将于3月正式实施。《指南》由浪潮信息牵头,中国电子技术标准化研究院、阿里云、统信...

关键字: 操作系统 编写 CPU 内存

北京2025年1月3日 /美通社/ -- 近日,人民日报海外网与中华环保联合会联合主办的第二届中国品牌形象海外传播论坛暨2024中国企业ESG蓝皮书发布会在北京举行。现场发布了《企业ESG蓝皮书:中国企业环境、社会与治理...

关键字: 可持续发展 WIND 智能化 编写

(全球TMT2023年8月24日讯)第三十届北京国际广播电影电视展览会(BIRTV2023)正在北京如火如荼地进行中。在展会上,成都索贝数码科技股份有限公司与深圳市洲明科技股份有限公司宣布签署战略合作协议,双方将携手布...

关键字: 模型 TV 编写 网络视频

妇科大咖云集 共话日间诊疗新模式 北京2023年3月7日 /美通社/ -- 为进一步推广由郎景和院士牵头,朱兰教授等我国多位著名妇科医学专家共同编著《日间宫腔镜手术中心设置及管理流程中国专家共识》,普及日间宫腔镜诊疗理...

关键字: 东风 内窥镜 编写 调试

上海2022年11月1日 /美通社/ -- 近日,由上海勃林格殷格翰药业有限公司与华东理工大学药学院合作编写的高等学校通识课精品教材《质量文化导论》正式出版发行。这也是国内首门质量文化课程配套教材。该书的出版有望助力全国...

关键字: 内核 编写

上海2022年9月6日 /美通社/ -- 9月3日上午,《"东数西算"战略下绿色智算中心产业发展研究报告》重磅发布。该报告由国家信息中心与燧原科技深度合作,联合庆阳市人民政府、之江实验室、中国能建共同...

关键字: 数字经济 安防 模型 编写

(全球TMT2022年8月31日讯)8月25日,"2022算网融合产业发展峰会"在北京举行,会上中国信息通信研究院发布《"边缘计算+"技术白皮书》,该白皮书由信通院发起,浪潮信息等业界多家领袖企业参与编写,为边缘计算在...

关键字: 边缘计算 人工智能 机器人 编写

北京2022年8月31日 /美通社/ -- 8月25日,"2022算网融合产业发展峰会"在北京举行,大会汇聚工业和信息化部、中国通信标准化协会、运营商、阿里巴巴、国家电网、浪潮信息等政府及企...

关键字: 编写 边缘计算 AI ECOM

"为加快推进深圳团体标准建设,提升社会团体的编写能力" 深圳2022年8月29日 /美通社/ -- 为加快推进深圳团体标准建设,满足深圳市社会团体对团体标准化能力提升的迫切需求,提升社会团体的标准编...

关键字: 编写 新能源汽车 汽车产业 电动汽车
关闭