我是老温,一名热爱学习的嵌入式工程师
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 Dtypedef 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、场景改变后 根据映射表执行相应的函数Handlerif(current_stage!=prev_stage){ stage_tab[current_stage].current_operate(); prev_stage=current_stage;}
& k8 j* W6 O5 G0 w
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
. S$ H" {) D& Q) B' h& \' W* e/ ?嵌入式牛马工程师,选对工具至少可以让自己干活轻松一点!
6 {- D& E W( L6 ~/ p, c
diill4b1hco640292105.jpg
* R: i" l* c7 {2 Y1 \嵌入式软件开发岗位,面试过程中常见的 16 个 C 语言问题。4 s7 v x, h) n+ K! z
xiy3zdriyw2640292205.jpg
, V* ]$ b' t8 b+ u$ Y0 a9 ]
嵌入式软件编程,使用动态内存分配有哪些坑,怎样预防?
9 c& @* V5 r$ o4 S5 G% a$ `, c* b我是老温,一名热爱学习的嵌入式工程师3 k; w; V' _8 [
关注我,一起变得更加优秀! |