博客专栏

EEPW首页>博客> 嵌入式开发的一个骚操作!你用过吗?

嵌入式开发的一个骚操作!你用过吗?

发布人:xiaomaidashu 时间:2023-12-06 来源:工程师 发布文章
目录
  • 1 映射表在串口数据解析中的应用

    • 1.1 数据结构

  • 1.2 指令、函数映射表

    • 1.3 串口解析函数实现

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

    • 2.1 数据结构

    • 2.2 函数映射表

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

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

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

1 映射表在串口数据解析中的应用1.1 数据结构
typedefstruct
{
charCMD[CMDLen];
unsignedchar(*cmd_operate)(char*data);
}Usart_Tab;
1.2 指令、函数映射表
staticconstUsart_Tab InstructionList[CMDMax]=
{
{"PWON",PowOn},
{"PWOFF",PowOff},
{"HDCP",HdcpOnOff},
{"/V",QueryKaVersion},
{"EDIDUpgrade",UpdataEDID},
{"Psave",Psave},
{"Precall",Precall},
{"Pclear",Pclear},
};
1.3 串口解析函数实现
unsignedcharDataAnalysis(char*buf){
unsignedchari,Result;
char*NEXT=NULL;
for(i=0;i{
NEXT=StrCmp(buf,(char*)InstructionList[i].CMD);
if(NEXT!=NULL)
{
usartfuncp=InstructionList[i].cmd_operate;
Result=(*usartfuncp)(NEXT);
}
}
returnResult;
}
2 映射表在UI设计中的应用2.1 数据结构

菜单枚举:

typedefenum
{
stage1=0,
stage2,
stage3,
stage4,
stage5,
stage6,
stage7,
stage8,
stage9,
}SCENE;

数据结构:

typedefstruct{
void(*current_operate)();//当前场景的处理函数
SCENE Index;//当前场景的标签
SCENE Up;//按下Up键跳转的场景
SCENE Down;//按下Down键跳转的场景
SCENE Right;//按下Left键跳转的场景
SCENE Left;//按下Right键跳转的场景
}STAGE_TAB;
2.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},
};
2.3 定义两个变量保存当前场景和上一个场景
charcurrent_stage=stage1;
charprev_stage=current_stage;
2.4 按下Up按键 跳转到指定场景current_stage的值根据映射表改变
current_stage =stage_tab[current_stage].Up;
2.5 场景改变后 根据映射表执行相应的函数Handler
if(current_stage!=prev_stage)
{
stage_tab[current_stage].current_operate();
prev_stage=current_stage;
}

文章来源:物联网IoT技术

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


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。



关键词:嵌入式

相关推荐

技术专区

关闭