用云主机做网站新闻营销发稿平台
目录
一、嵌入式中的映射表是什么?
二、映射表在串口数据解析中的应用
1. 数据结构
2. 指令、函数映射表
3. 串口解析函数实现
三、映射表在UI设计中的应用
1. 数据结构
2. 函数映射表
3. 定义两个变量保存当前场景和上一个场景
4. 按下Up按键 跳转到指定场景current_stage的值根据映射表改变
5. 场景改变后 根据映射表执行相应的函数Handler
(* ̄︶ ̄)创作不易!期待你们的 点赞、收藏和评论喔。
一、嵌入式中的映射表是什么?
在嵌入式系统开发中,映射表(Lookup table)是一种常见的数据结构,用于将输入值(通常是一个或多个离散的输入)映射到对应的输出值。它是一种预先计算和存储的数据表格,可以快速查找和获取对应的输出值,而无需进行复杂的计算。
映射表通常以数组或者哈希表的形式存储,其中输入值被用作索引或关键字,而与之对应的输出值存储在相应的位置上。当系统需要根据给定的输入值获取对应的输出时,只需通过查询映射表即可获得结果,无需进行繁琐的计算过程。
在嵌入式系统中,映射表常用于优化算法、信号处理、数据转换等场景。通过使用映射表,可以提高系统响应速度、降低功耗,并且减少代码的复杂性。
需要注意的是,映射表的设计和填充要根据具体应用场景来进行,确保映射表能够准确地满足系统需求,并且占用的内存空间不超过系统的限制。此外,在使用映射表时还需要考虑数据的精度以及表格的更新机制,以保证系统的准确性和可靠性。
二、映射表在串口数据解析中的应用
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<CMDMax;i++){NEXT=StrCmp(buf,(char*)InstructionList[i].CMD);if(NEXT!=NULL){usartfuncp=InstructionList[i].cmd_operate;Result=(*usartfuncp)(NEXT);}}return Result;
}
三、映射表在UI设计中的应用
1. 数据结构
typedef enum
{stage1=0,stage2,stage3,stage4,stage5,stage6,stage7,stage8,stage9,
}SCENE;
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;
}