工程师进阶笔记 发表于 4 天前

嵌入式软件设计,命令与函数映射表的具体应用示例!

我是老温,一名热爱学习的嵌入式工程师
关注我,一起变得更加优秀!一、映射表在串口数据解析中的应用1、数据结构[*][*][*][*][*]typedef struct {    char CMD;    unsigned char (*cmd_operate)(char *data);}Usart_Tab;2、指令、函数映射表[*][*][*][*][*][*][*][*][*][*][*]static const Usart_Tab InstructionList={    {"PWON",PowOn},    {"PWOFF",PowOff},    {"HDCP",HdcpOnOff},    {"/V",QueryKaVersion},    {"EDIDUpgrade",UpdataEDID},    {"Psave",Psave},    {"Precall",Precall},    {"Pclear",Pclear},};3、串口解析函数实现[*][*][*][*][*][*][*][*][*][*][*][*][*][*][*]unsigned char DataAnalysis(char *buf){unsigned char i,Result;char *NEXT=NULL;for(i=0;i{    NEXT=StrCmp(buf,(char*)InstructionList.CMD);    if(NEXT!=NULL)    {      usartfuncp=InstructionList.cmd_operate;      Result=(*usartfuncp)(NEXT);    }}return Result;}二、映射表在UI设计中的应用1、数据结构菜单枚举:
[*][*][*][*][*][*][*][*][*][*][*][*]typedef enum{stage1=0,stage2,stage3,stage4,stage5,stage6,stage7,stage8,stage9,}SCENE;数据结构:
[*][*][*][*][*][*][*][*]typedef struct {void (*current_operate)(); //当前场景的处理函数SCENE Index;               //当前场景的标签SCENE Up;                  //按下Up键跳转的场景SCENE Down;                //按下Down键跳转的场景SCENE Right;               //按下Left键跳转的场景SCENE Left;                //按下Right键跳转的场景}STAGE_TAB;2、函数映射表[*][*][*][*][*][*][*][*][*][*][*][*]STAGE_TAB stage_tab[]={#.    operate       Index    Up   Down    Left   Right   {Stage1_Handler,stage1,stage4,stage7,stage3, stage2},{Stage2_Handler,stage2,stage5,stage8,stage1, stage3},{Stage3_Handler,stage3,stage6,stage9,stage2, stage1},{Stage4_Handler,stage4,stage7,stage1,stage6, stage5},{Stage5_Handler,stage5,stage8,stage2, stage4,stage6},{Stage6_Handler,stage6,stage9,stage3, stage5,stage4},{Stage7_Handler,stage7,stage1,stage4, stage9,stage8},{Stage8_Handler,stage8,stage2,stage5, stage7,stage9},{Stage9_Handler,stage9,stage3,stage6, stage8,stage7},};3、定义两个变量保存当前场景和上一个场景[*][*]char current_stage=stage1;char prev_stage=current_stage;4、按下Up按键 跳转到指定场景current_stage的值根据映射表改变[*]current_stage =stage_tab.Up;5、场景改变后 根据映射表执行相应的函数Handler[*][*][*][*][*]if(current_stage!=prev_stage){stage_tab.current_operate();prev_stage=current_stage;}


-END-
往期推荐:点击图片即可跳转阅读

嵌入式牛马工程师,选对工具至少可以让自己干活轻松一点!

嵌入式软件开发岗位,面试过程中常见的 16 个 C 语言问题。

嵌入式软件编程,使用动态内存分配有哪些坑,怎样预防?
我是老温,一名热爱学习的嵌入式工程师
关注我,一起变得更加优秀!
页: [1]
查看完整版本: 嵌入式软件设计,命令与函数映射表的具体应用示例!