基于状态机的单片机编程

前言

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

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

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

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


方法论

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

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

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

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

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

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


变量状态转移流程框图


系统状态转移流程框图


系统状态转移函数示例

相关推荐

  1. 基于单片机直流电控制

    2023-12-09 23:24:02       34 阅读
  2. 状态编程常用框架和方法

    2023-12-09 23:24:02       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-09 23:24:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-09 23:24:02       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-09 23:24:02       87 阅读
  4. Python语言-面向对象

    2023-12-09 23:24:02       96 阅读

热门阅读

  1. c语言编程题经典100例——(90~95例)

    2023-12-09 23:24:02       52 阅读
  2. [动态规划]最长公共子序列

    2023-12-09 23:24:02       51 阅读
  3. 从Android源码中生成系统签名文件

    2023-12-09 23:24:02       55 阅读
  4. 面向无组织点云中快速鲁棒的边缘提取方法

    2023-12-09 23:24:02       54 阅读
  5. 考研真题数据结构

    2023-12-09 23:24:02       53 阅读
  6. Centos7安装docker支持NVIDIA GPU

    2023-12-09 23:24:02       49 阅读
  7. 反向传播算法

    2023-12-09 23:24:02       52 阅读
  8. 《C++新经典设计模式》之第18章 备忘录模式

    2023-12-09 23:24:02       61 阅读
  9. 考研真题数据结构

    2023-12-09 23:24:02       53 阅读
  10. 数据科学:Scipy、Scikit-Learn笔记

    2023-12-09 23:24:02       56 阅读
  11. Kotlin关键字二——constructor和init

    2023-12-09 23:24:02       64 阅读
  12. python中星号(*)的作用

    2023-12-09 23:24:02       56 阅读
  13. F. Maximum White Subtree

    2023-12-09 23:24:02       53 阅读
  14. hive sql&spark 优化

    2023-12-09 23:24:02       66 阅读
  15. 数据结构——栈与栈排序

    2023-12-09 23:24:02       73 阅读