一、映射表在串口數(shù)據(jù)解析中的應(yīng)用
1、數(shù)據(jù)結(jié)構(gòu)
typedef struct { char CMD[CMDLen]; unsigned char (*cmd_operate)(char *data); }Usart_Tab;
2、指令、函數(shù)映射表
static const Usart_Tab InstructionList[CMDMax]= { {"PWON",PowOn}, {"PWOFF",PowOff}, {"HDCP",HdcpOnOff}, {"/V",QueryKaVersion}, {"EDIDUpgrade",UpdataEDID}, {"Psave",Psave}, {"Precall",Precall}, {"Pclear",Pclear}, };
3、串口解析函數(shù)實(shí)現(xiàn)
unsigned char DataAnalysis(char *buf) { unsigned char i,Result; char *NEXT=NULL; for(i=0;i二、映射表在UI設(shè)計(jì)中的應(yīng)用
1、數(shù)據(jù)結(jié)構(gòu)
菜單枚舉:
typedef enum { stage1=0, stage2, stage3, stage4, stage5, stage6, stage7, stage8, stage9, }SCENE;數(shù)據(jù)結(jié)構(gòu):
typedef struct { void (*current_operate)(); //當(dāng)前場(chǎng)景的處理函數(shù) SCENE Index; //當(dāng)前場(chǎng)景的標(biāo)簽 SCENE Up; //按下Up鍵跳轉(zhuǎn)的場(chǎng)景 SCENE Down; //按下Down鍵跳轉(zhuǎn)的場(chǎng)景 SCENE Right; //按下Left鍵跳轉(zhuǎn)的場(chǎng)景 SCENE Left; //按下Right鍵跳轉(zhuǎn)的場(chǎng)景 }STAGE_TAB;2、函數(shù)映射表
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、定義兩個(gè)變量保存當(dāng)前場(chǎng)景和上一個(gè)場(chǎng)景
char current_stage=stage1; char prev_stage=current_stage;4、按下Up按鍵 跳轉(zhuǎn)到指定場(chǎng)景current_stage的值根據(jù)映射表改變
current_stage =stage_tab[current_stage].Up;
5、場(chǎng)景改變后 根據(jù)映射表執(zhí)行相應(yīng)的函數(shù)Handler
if(current_stage!=prev_stage) { stage_tab[current_stage].current_operate(); prev_stage=current_stage; }編輯:黃飛
?
評(píng)論