基于状态机的单片机编程

news2025/1/21 2:50:18

前言

在设计锂离子电池充电器时,对于以前的根据系统状态进行判断,置标志位的方法,会显得程序臃肿,且架构混乱,变量交错复杂,移植困难。

所以结合实际项目,给出了一种基于状态机的编程方法。

有纰漏请指出,转载请说明。

学习交流请发邮件 1280253714@qq.com


方法论

对于电池包,一般会有几个端子与充电器进行通信识别,有BS(Battery Select)、NTC(负温度系数的电阻),正负极、通信口。

有些电池包内置NTC,通过通信将信息发给充电器,有些是直接接NTC给到充电器。

如果按照以往的编程方法,需要经常if else,而且各种标志位flag散乱于程序各处,代码臃肿,调试困难,bug不断,移植困难。

所以我提出了这种基于状态机的编程方法,对各个变量(电压、电流、温度、BS等),持续检测,同时各个状态可以随时转移。

最终任务级函数BatStateCheck判别参数状态,进行参数选择。

同时为了防止系统抖动,需要多次判断才能进行状态转移,demo如下。


变量状态转移流程框图


系统状态转移流程框图


系统状态转移函数示例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1298437.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

线程上下文切换

线程上下文切换 巧妙地利用了时间片轮转的方式, CPU 给每个任务都服务一定的时间,然后把当前任务的状态保存下来,在加载下一任务的状态后,继续服务下一任务,任务的状态保存及再加载, 这段过程就叫做上下文切换。时间片轮转的方式…

对String类的操作 (超细节+演示)

[本节目标] 1.认识String类 2.了解String类的基本用法 3.熟练掌握String类的常见操作 4.认识字符串常量池 5.认识StringBuffer和StringBuilder 1.String类的重要性 在C语言中已经涉及到字符串了,但是在C语言中要表示字符串只能使用字符数组或者字符指针&…

差异计算基础知识 - 了解期末业务操作、WIP 和差异

原文地址:Basics of variance calculation-Understanding Period End activities, WIP and Variances | SAP Blogs 大家好, 这是我在成本核算方面的第六份文件,旨在解释期末的差异计算和相关活动。 我将引导您完成期末活动和差异计算。在本文…

Spring Cloud Gateway 网关的基础使用

1. 什么是网关?网关有什么用? 在微服务架构中,网关就是一个提供统一访问地址的组件,它解决了内部微服务与外部的交互问题。网关主要负责流量的路由和转发,将外部请求引到对应的微服务实例上。同时提供身份认证、授权、…

前后端数据传输格式(下)

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 上篇主要复习了HTTP以及…

解释AI决策,这10个强大的 Python 库记得收藏!

本文整理了10个常用于可解释AI的Python库,方便我们更好的理解AI模型的决策。 什么是XAI? XAI(Explainable AI)的目标是为模型的行为和决策提供合理的解释,这有助于增加信任、提供问责制和模型决策的透明度。XAI 不仅…

鸿蒙生态开发就业前景到底好不好

鸿蒙生态开发是指基于华为自主研发的操作系统鸿蒙(HarmonyOS)进行应用程序开发和生态建设。目前,鸿蒙生态开发的前景非常好,原因如下:做鸿蒙应用开发到底学习些啥? (qq.com) 1:政府支持&#x…

高德地图vue实现自定义标点热力图效果(缩放时展示不同数据)

高德地图插件引入省略。。。样式和vue基础组件省略。。。 如果每个标点没有数值,则可以用点聚合来实现功能下面例子,每个标点会有按市统计的数值,而且缩放一定程度时,需要展示按省统计的标点,因此需要自定义标点样式和…

Ubuntu中编译出Windows的可执行程序(.exe)

1、前言 在嵌入式开发中,交叉编译是很常见的情况,如果你把Windows电脑也看做一块高性能的开发板,那在Ubuntu中编译出Windows上运行的可执行程序也是很好理解的行为。 2、安装mingw64环境 sudo apt-get install mingw-w64 3、测试编译链是否安…

特权FPGA 学习笔记

存储器可用于异步时钟域的信号处理,双口RAM多用于交互式数据,FIFO多用于单向数据传输;以task的方式封装testbench子程序,以提高复用程度;模板中,vho是vhdl模板,veo是verilog模板;run…

第七届中老越三国丢包狂欢节暨2023年中老越三国(普洱)边境商品交易会新闻发布会在昆明召开

12月8日,第七届中老越三国丢包狂欢节暨2023年中老越三国(普洱)边境商品交易会新闻发布会在昆明召开。据悉,本届丢包节暨边交会将于2023年12月22日至26日在普洱市江城哈尼族彝族自治县举办。 发布会现场 中老越三国丢包狂欢节自200…

解决 php 连接mysql数据库时报错:Fatal error: Class ‘mysqli’ not found in问题

在使用php对mysql进行连接的过程中,出现了Fatal error: Uncaught Error: Class "mysqli" not found in的问题 解决方案 这个错误通常表示您的PHP代码中缺少MySQL扩展或者没有启用MySQL扩展。 我们首先确认一下PHP环境中已经安装了MySQL扩展。检查一下自己…

v4l2接收流程

内核media驱动目录结构 目录media/driver,子目录说明如下,主要列举本文中使用到的目录 目录功能I2C摄像头,解串器(max9296/9295等)platform控制器的驱动,例如mipi控制等v4l2_coreioctl 入口等media\common\videobuf2…

哈希表的几种实现方式与比较

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 哈希表概述 哈希表(Hash Table)是一种常用的数据结构,用于实现键值对的映射关系。它通过哈希函数将键映射到一个特定的索引位置&#xf…

Spring Boot 3 整合 Mybatis-Plus 实现动态数据源切换实战

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

银河麒麟本地软件源配置方法

软件源介绍 软件源可以理解为软件仓库,当需要安装软件时则会根据源配置去相应的软件源下载软件包,此方法的优点是可以自动解决软件包的依赖关系。常见的软件源有光盘源、硬盘源、FTP源、HTTP源,本文档主要介绍本地软件源的配置方法&#xff…

专注抖音短视频账号矩阵系统源头开发---saas工具

抖音账号|短视频矩阵分发系统 | 多账号管理发布 |MVC架 短视频矩阵分发系统是一种可以帮助企业、机构和个人高效分发短视频的工具。随着社交媒体的不断普及,短视频的使用越来越广泛,因此如何快速而准确地将短视频传播到不同的平台和账号上已经成为了一个…

短剧分销平台搭建:短剧变现新模式

短剧作为今年大热的行业,深受大众追捧!短剧剧情紧凑,几乎每一集都有高潮剧情,精准击中了当下网友的碎片化时间。 短剧的形式较为灵活,可以轻松融入各种的元素,比如喜剧、悬疑、爱情等,可以满足…

一加 12 Pop-up快闪活动来袭,十城联动火爆开启

12 月 9 日,一加 12 Pop-up 快闪活动在北京、深圳、上海、广州等十城联动开启,各地加油欢聚快闪现场,抢先体验与购买一加 12。作为一加十年超越之作,一加 12 全球首发拥有医疗级护眼方案和行业第一 4500nit 峰值亮度的 2K 东方屏、…

postman常用脚本

一、在参数中动态添加开始时间和结束时间的时间戳 1.先在collection中添加参数,这里的作用域是collection,也可以是其他的任何scope 2.在Pre-request Script 中设定开始时间和结束时间参数,比如昨天和今天的时间戳,下面是js代码 …