当前位置:   article > 正文

嵌入式开发的一个骚操作!

嵌入式开发的一个骚操作!
关注、星标公众号,直达精彩内容

来源 | 网络

目录

  • 1 映射表在串口数据解析中的应用

  • 1.2 指令、函数映射表

    • 1.3 串口解析函数实现

  • 2 映射表在UI设计中的应用

    • 2.1 数据结构

    • 2.2 函数映射表

    • 2.3 定义两个变量保存当前场景和上一个场景

    • 2.4 按下Up按键 跳转到指定场景current_stage的值根据映射表改变

    • 2.5 场景改变后 根据映射表执行相应的函数Handler

1 映射表在串口数据解析中的应用

1.1 数据结构

  1. typedef struct 
  2. {
  3.     char CMD[CMDLen];
  4.     unsigned char (*cmd_operate)(char *data);
  5. }Usart_Tab;

1.2 指令、函数映射表

  1. static const Usart_Tab InstructionList[CMDMax]=
  2. {
  3.     {"PWON",PowOn},
  4.     {"PWOFF",PowOff},
  5.     {"HDCP",HdcpOnOff},
  6.     {"/V",QueryKaVersion},
  7.     {"EDIDUpgrade",UpdataEDID},
  8.     {"Psave",Psave},
  9.     {"Precall",Precall},
  10.     {"Pclear",Pclear},
  11. };

1.3 串口解析函数实现

  1. unsigned char DataAnalysis(char *buf)
  2. {
  3.   unsigned char i,Result;
  4.   char *NEXT=NULL;
  5.   for(i=0;i<CMDMax;i++)
  6.   {
  7.     NEXT=StrCmp(buf,(char*)InstructionList[i].CMD);
  8.     if(NEXT!=NULL)
  9.     {
  10.       usartfuncp=InstructionList[i].cmd_operate;
  11.       Result=(*usartfuncp)(NEXT);
  12.     }
  13.   }
  14.   return Result;
  15. }

2 映射表在UI设计中的应用

2.1 数据结构

菜单枚举:

  1. typedef enum
  2. {
  3.   stage1=0,
  4.   stage2,
  5.   stage3,
  6.   stage4,
  7.   stage5,
  8.   stage6,
  9.   stage7,
  10.   stage8,
  11.   stage9,
  12. }SCENE;

数据结构:

  1. typedef struct {
  2.   void (*current_operate)(); //当前场景的处理函数
  3.   SCENE Index;               //当前场景的标签
  4.   SCENE Up;                  //按下Up键跳转的场景
  5.   SCENE Down;                //按下Down键跳转的场景
  6.   SCENE Right;               //按下Left键跳转的场景
  7.   SCENE Left;                //按下Right键跳转的场景
  8. }STAGE_TAB;

2.2 函数映射表

  1. STAGE_TAB stage_tab[]={
  2.   #.    operate       Index    Up     Down    Left   Right   
  3.   {Stage1_Handler,  stage1,  stage4,  stage7,  stage3, stage2},
  4.   {Stage2_Handler,  stage2,  stage5,  stage8,  stage1, stage3},
  5.   {Stage3_Handler,  stage3,  stage6,  stage9,  stage2, stage1},
  6.   {Stage4_Handler,  stage4,  stage7,  stage1,  stage6, stage5},
  7.   {Stage5_Handler,  stage5,  stage8,  stage2, stage4,  stage6},
  8.   {Stage6_Handler,  stage6,  stage9,  stage3, stage5,  stage4},
  9.   {Stage7_Handler,  stage7,  stage1,  stage4, stage9,  stage8},
  10.   {Stage8_Handler,  stage8,  stage2,  stage5, stage7,  stage9},
  11.   {Stage9_Handler,  stage9,  stage3,  stage6, stage8,  stage7},
  12. };

2.3 定义两个变量保存当前场景和上一个场景

  1. char current_stage=stage1;
  2. char prev_stage=current_stage;

2.4 按下Up按键 跳转到指定场景current_stage的值根据映射表改变

current_stage =stage_tab[current_stage].Up;

2.5 场景改变后 根据映射表执行相应的函数Handler

  1. if(current_stage!=prev_stage)
  2. {
  3.   stage_tab[current_stage].current_operate();
  4.   prev_stage=current_stage;
  5. }

文章来源:物联网IoT技术 

版权声明:本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。

‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧

关注我的微信公众号,回复“星球”加入知识星球,有问必答。
点击“阅读原文”查看知识星球详情,欢迎点分享、收藏、点赞、在看。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/459969
推荐阅读
相关标签
  

闽ICP备14008679号