当前位置: 首页 > 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;
}


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

相关文章:

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

目录 一、嵌入式中的映射表是什么&#xff1f; 二、映射表在串口数据解析中的应用 1. 数据结构 2. 指令、函数映射表 3. 串口解析函数实现 三、映射表在UI设计中的应用 1. 数据结构 2. 函数映射表 3. 定义两个变量保存当前场景和上一个场景 4. 按下Up按键 跳转到指定场…...

react中的useState和useImmer的用法

文章目录 一、useState1. 更新基本类型数据2. 更新对象3. 更新嵌套对象4. 更新数组5.更新数组对象 二、Immer1. 什么是Immer2. 使用use-immer更新嵌套对象3. 使用useImmer更新数组内部的对象 一、useState react中文官网教程 1. 更新基本类型数据 在函数式组件中&#xff0c…...

Can‘t compile code “launch: program <program_path> does not exist “

StackOverflow上有一个类似的提问 我的情况很特殊&#xff0c;上面的回答没有解决我的问题&#xff0c;最后我发现是我的cpp文件名称为数字开头&#xff08;类似于1_floy.cpp&#xff09;&#xff0c;把名字里的数字挪到后面就好了。。。。。...

Mac电脑上升级nodejs

第一步&#xff0c;先查看本机node.js版本&#xff1a; node -v 第二步&#xff0c;清除node.js的cache&#xff1a; sudo npm cache clean -f 第三步&#xff0c;安装 n 工具&#xff0c;这个工具是专门用来管理node.js版本的&#xff0c;别怀疑这个工具的名字&#xff0c…...

基于单片机的太阳跟踪系统的设计

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、设计的主要内容二、硬件电路设计2.1跟踪控制方案的选择2.1.1跟踪系统坐标系的选择2.2系统总体设计及相关硬件介绍…...

V3Det大规模词汇视觉检测数据集与LaRS海上全景障碍物检测数据集

V3Det与LaRS是ICCV2023上发表的数据集工作&#xff0c;规模都比较大&#xff0c;后续有可能会用到&#xff0c;因此记录下来。 V3Det: Vast Vocabulary Visual Detection Dataset Paper: https://arxiv.org/abs/2304.03752 URL: https://v3det.openxlab.org.cn/ 在现实世界中…...

ubuntu(18.04) 安装 blast

1、下载 https://ftp.ncbi.nlm.nih.gov/blast/executables/blast/LATEST/2、解压&#xff0c;配置环境变量 tar zvxf ncbi-blast-2.14.1-x64-linux.tar.gz解压后改名为 blast 配置环境变量&#xff0c;可以不配置 使用的时候直接绝对路径使用 vim ~/.bashrc 将下面添加道最…...

3.2每日一题(定积分求抽水做工问题)

1、画图&#xff0c;把题目的容器画出来&#xff1a;球形容器&#xff0c;半径为R 2、根据容器的形状进行分析&#xff1a; 抽水的实质是不同深度的水抽出去走的位移是不一样的>抽水的过程 &#xff1a; &#xff08;1&#xff09;先考虑深度为 x到xdx 的薄层水抽出去做多少…...

c语言基础:L1-063 吃鱼还是吃肉

国家给出了 8 岁男宝宝的标准身高为 130 厘米、标准体重为 27 公斤&#xff1b;8 岁女宝宝的标准身高为 129 厘米、标准体重为 25 公斤。 现在你要根据小宝宝的身高体重&#xff0c;给出补充营养的建议。 输入格式&#xff1a; 输入在第一行给出一个不超过 10 的正整数 N&am…...

<if> 标签中使用了不正确的语法。在 XML 中,<if> 标签不需要使用 <![CDATA[ ... ]]> 将条件语句包装起来。 否则会报错

标签中使用了不正确的语法。在 XML 中&#xff0c; 标签不需要使用 <![CDATA[ ... ]]> 将条件语句包装起来。 否则会报错...

Ubuntu 诞生 19 年

导读2004 年 10 月 20 日&#xff0c;Ubuntu 4.10 正式发布&#xff0c;代号‘Warty Warthog’。 作为 Ubuntu 第一个版本&#xff0c;4.10 问世后立刻受到广大 Linux 用户欢迎。它搭载了当时最新的 GNOME 2.8 桌面环境&#xff0c;以及一系列实用软件&#xff0c;比如 Mozilla…...

JVM进阶(3)

一)什么是垃圾&#xff1f; 垃圾指的是在应用程序中没有任何指针指向的对象&#xff0c;这个对象就是需要被回收的垃圾&#xff0c;如果不及时的针对内存中的垃圾进行清理&#xff0c;那么这些垃圾对象所占用的内存空间可能一直保留到应用程序结束&#xff0c;被保留的空间无法…...

Qt QWidget、QDialog、QMainWindow的区别

QWidget QWidget是Qt框架中最基础的窗口类&#xff0c;可以理解为用户界面的最基本单元。QWidget类提供了一个空白窗口&#xff0c;可以通过继承该类来创建自定义的窗口类。QWidget类提供了基本的窗口属性和方法&#xff0c;如大小、位置、标题、图标等。 QDialog QDialog是…...

软考 系统架构设计师系列知识点之设计模式(10)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之设计模式&#xff08;9&#xff09; 所属章节&#xff1a; 老版&#xff08;第一版&#xff09;教材 第7章. 设计模式 第2节. 设计模式实例 相关试题 9. 某软件公司欲设计一款图像处理软件&#xff0c;帮助用户对拍…...

【python爬虫】设计自己的爬虫 1. request封装

通过requests.session().request 封装request方法 考虑到请求HTTP/2.0 同时封装httpx 来处理HTTP/2.0的请求 封装requests # 遇到请求失败的情况时 重新请求&#xff0c;请求5次等待2s retry(stop_max_attempt_number5, retry_on_resultlambda re_data: re_data is None, wai…...

8.0 新特性 - innodb_ddl_threads

前言 MySQL 8.0.27 引入了一个新变量来控制 InnoDB 可用于创建&#xff08;排序和构建&#xff09;二级索引的最大并行线程数&#xff1a;innodb_ddl_threads 通过调整该参数&#xff0c;可以提升二级索引的创建速度。 参数介绍 1. innodb_ddl_threads 创建二级索引时&…...

pgAdmin 4 v7.8 发布,PostgreSQL 开源图形化管理工具

导读pgAdmin 是 PostgreSQL 领先的开源图形化管理工具。pgAdmin 4 旨在满足新手和有经验的 Postgres 用户的需求&#xff0c;提供强大的图形界面&#xff0c;简化了数据库对象的创建、维护和使用。 pgAdmin 开发团队日前发布了 pgAdmin 4 v7.8 版本&#xff0c;这个版本包括 21…...

Realrek 2.5G交换机 8+1万兆光RTL8373-VB-CG方案简介

新一代2.5G交换机方案RTL8373-VB-CG可以提供4中不同形态 a. 52.5G 电口110G光》RTL8373 b. 52.5G 电口110G电》RTL83738261 c. 82.5G 电口110G光》RTL83738224 d.82.5G 电口110G电口》RTL837382248261 1.概述 Realtek RTL8373-CG是一款低功耗、高性能、高度集成的八端口2.5G和一…...

Linux命令随笔

文章目录 grep命令 grep命令 例如&#xff0c;在Linux系统中&#xff0c;要在当前目录下的所有文件中搜索包含字符串"hello"的行&#xff0c;并显示文件名&#xff0c;可以使用以下命令&#xff1a; grep -r "hello" .其中&#xff0c;"."表示…...

最新版scene-builder安装

JavaFX Scene Builder是一个可视化的布局工具&#xff0c;用于设计JavaFX用户界面。它允许开发人员使用拖放和可视化的方式创建和编辑JavaFX界面&#xff0c;而无需直接编写代码。 JavaFX Scene Builder提供了一个直观的界面&#xff0c;让开发人员可以轻松地创建和修改JavaFX…...

深度技术解析:IDM激活脚本(IAS)的注册表锁定机制与长期试用方案

深度技术解析&#xff1a;IDM激活脚本&#xff08;IAS&#xff09;的注册表锁定机制与长期试用方案 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script Internet Dow…...

BiliRoamingX集成开发:Android 14兼容性优化与高级模块注入技术解析

BiliRoamingX集成开发&#xff1a;Android 14兼容性优化与高级模块注入技术解析 【免费下载链接】BiliRoamingX-integrations BiliRoamingX integrations powered by revanced. 项目地址: https://gitcode.com/gh_mirrors/bi/BiliRoamingX-integrations BiliRoamingX作为…...

Anything V5图像生成效果实测:高清画质与丰富风格展示

Anything V5图像生成效果实测&#xff1a;高清画质与丰富风格展示 1. 引言&#xff1a;惊艳的二次元创作体验 1.1 模型核心能力概述 Anything V5作为Stable Diffusion生态中的明星模型&#xff0c;专为动漫风格图像生成优化。经过大规模高质量二次元数据训练&#xff0c;它能…...

实战指南:基于OpenSpec规范,使用快马平台生成可直接集成的微服务客户端代码

今天在微服务开发中遇到一个典型需求&#xff1a;我们的支付网关服务已经用OpenAPI 3.0规范定义好了接口&#xff0c;现在需要在另一个Java服务中调用这些接口。传统做法要手动写HTTP客户端代码&#xff0c;既耗时又容易出错。最近发现InsCode(快马)平台能基于OpenSpec文档自动…...

泛微E9流程表单转PDF/HTML实战:手把手教你集成档案系统(附完整代码)

泛微E9流程表单转PDF/HTML全流程开发指南&#xff1a;从原理到实战 在企业管理数字化转型的浪潮中&#xff0c;OA系统与档案系统的无缝对接已成为提升组织效能的刚需。作为国内主流的协同办公平台&#xff0c;泛微E9的流程表单承载着企业核心业务流程数据&#xff0c;如何将这些…...

Pixel Fashion Atelier部署教程:Stable Diffusion像素时装生成工作站保姆级安装指南

Pixel Fashion Atelier部署教程&#xff1a;Stable Diffusion像素时装生成工作站保姆级安装指南 1. 项目介绍 Pixel Fashion Atelier&#xff08;像素时装锻造坊&#xff09;是一款基于Stable Diffusion与Anything-v5模型的图像生成工作站。与传统AI工具不同&#xff0c;它采…...

Chainlit前端定制化|通义千问1.5-1.8B-GPTQ-Int4私有化部署与UI二次开发教程

Chainlit前端定制化&#xff5c;通义千问1.5-1.8B-GPTQ-Int4私有化部署与UI二次开发教程 你是不是已经体验过各种在线大模型&#xff0c;但总感觉有些限制&#xff1f;比如数据隐私的担忧、网络延迟的困扰&#xff0c;或者想打造一个完全属于自己的、界面更符合业务需求的AI助…...

string字符串基础相关知识

课程要求1.string的三种创建方式2.string常用方法空格处理&#xff0c;空值判断&#xff0c;替换操作&#xff0c;字符串截取&#xff0c;字符串拆分&#xff0c;字符索引访问拼接与性能&#xff0c;删除操作3.理解 string 不可变性&#xff0c;能在循环拼接场景中使用 StringB…...

OpenClaw环境迁移:GLM-4.7-Flash配置的备份与恢复方案

OpenClaw环境迁移&#xff1a;GLM-4.7-Flash配置的备份与恢复方案 1. 为什么需要环境迁移&#xff1f; 上周我的主力开发机突然硬盘故障&#xff0c;导致所有OpenClaw配置丢失。最痛心的是花了两周调试的GLM-4.7-Flash对接设置全部归零——包括精心调整的温度参数、自定义提示…...

OpenClaw对接GLM-4.7-Flash:模型版本管理指南

OpenClaw对接GLM-4.7-Flash&#xff1a;模型版本管理指南 1. 为什么需要关注模型版本管理 上周我在调试一个自动化文档处理流程时&#xff0c;遇到了一个奇怪的现象&#xff1a;同样的OpenClaw脚本&#xff0c;前一天还能完美运行的文档摘要功能&#xff0c;第二天突然开始输…...