电子产业一站式赋能平台

PCB联盟网

搜索
查看: 102|回复: 0
收起左侧

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

[复制链接]

568

主题

568

帖子

4219

积分

四级会员

Rank: 4

积分
4219
发表于 2025-4-1 18:17:00 | 显示全部楼层 |阅读模式
我是老温,一名热爱学习的嵌入式工程师
2 O) I) Q& Y  E/ m; ]. ?; V1 E- Z5 k关注我,一起变得更加优秀!一、映射表在串口数据解析中的应用1、数据结构
  • typedef struct {    char CMD[CMDLen];    unsigned char (*cmd_operate)(char *data);}Usart_Tab;2、指令、函数映射表
  • static const Usart_Tab InstructionList[CMDMax]={    {"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、数据结构菜单枚举:
    2 l% s  X4 T: V6 M7 s4 D
  • typedef enum{  stage1=0,  stage2,  stage3,  stage4,  stage5,  stage6,  stage7,  stage8,  stage9,}SCENE;数据结构:
    4 f8 h7 M; x; A) q( Z, C: ^
  • 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[current_stage].Up;5、场景改变后 根据映射表执行相应的函数Handler
  • if(current_stage!=prev_stage){  stage_tab[current_stage].current_operate();  prev_stage=current_stage;}
    & k8 j* W6 O5 G0 w

    03vjb5gbopi640291905.jpg

    03vjb5gbopi640291905.jpg

    3 i+ ]0 a  f2 g) l. _+ F; h

    3 i2 b: J- J' r3 N-END-9 Z2 n9 k8 V2 h: ^! |% L& t
    往期推荐:点击图片即可跳转阅读
    5 R8 x) \* Q1 x" |

    cirfqjpq2jf640292005.jpg

    cirfqjpq2jf640292005.jpg

    . S$ H" {) D& Q) B' h& \' W* e/ ?嵌入式牛马工程师,选对工具至少可以让自己干活轻松一点!
    6 {- D& E  W( L6 ~/ p, c

    diill4b1hco640292105.jpg

    diill4b1hco640292105.jpg

    * R: i" l* c7 {2 Y1 \嵌入式软件开发岗位,面试过程中常见的 16 个 C 语言问题。4 s7 v  x, h) n+ K! z

    xiy3zdriyw2640292205.jpg

    xiy3zdriyw2640292205.jpg
    , V* ]$ b' t8 b+ u$ Y0 a9 ]
    嵌入式软件编程,使用动态内存分配有哪些坑,怎样预防?
    9 c& @* V5 r$ o4 S5 G% a$ `, c* b我是老温,一名热爱学习的嵌入式工程师3 k; w; V' _8 [
    关注我,一起变得更加优秀!
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表