当前位置: 首页 > news >正文

【嵌入式项目应用】__嵌入式中,映射表的应用例子!

目录

一、嵌入式中的映射表是什么?

二、映射表在串口数据解析中的应用

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;
}


(* ̄︶ ̄)创作不易!期待你们的 点赞收藏评论喔。  

http://www.lryc.cn/news/211613.html

相关文章:

  • react中的useState和useImmer的用法
  • Can‘t compile code “launch: program <program_path> does not exist “
  • Mac电脑上升级nodejs
  • 基于单片机的太阳跟踪系统的设计
  • V3Det大规模词汇视觉检测数据集与LaRS海上全景障碍物检测数据集
  • ubuntu(18.04) 安装 blast
  • 3.2每日一题(定积分求抽水做工问题)
  • c语言基础:L1-063 吃鱼还是吃肉
  • <if> 标签中使用了不正确的语法。在 XML 中,<if> 标签不需要使用 <![CDATA[ ... ]]> 将条件语句包装起来。 否则会报错
  • Ubuntu 诞生 19 年
  • JVM进阶(3)
  • Qt QWidget、QDialog、QMainWindow的区别
  • 软考 系统架构设计师系列知识点之设计模式(10)
  • 【python爬虫】设计自己的爬虫 1. request封装
  • 8.0 新特性 - innodb_ddl_threads
  • pgAdmin 4 v7.8 发布,PostgreSQL 开源图形化管理工具
  • Realrek 2.5G交换机 8+1万兆光RTL8373-VB-CG方案简介
  • Linux命令随笔
  • 最新版scene-builder安装
  • 直击电商商城内核!一站式解决方案
  • rabbitmq安装、基本使用
  • Amaon CloudFront助力出海业务访问优化
  • python实现ModBusRTU服务端
  • yum安装node,npm
  • ESM蛋白质语言模型系列
  • RHCE-------Day1
  • Linux(Centos7)防火墙端口操作记录
  • 【MySQL数据库】初识MySQL数据库、安装MySQL
  • Keil Map信息解析
  • 在重生奇迹MU中如何选择最佳的挂机点?