- 博客(19)
- 收藏
- 关注
原创 电池管理系统之神奇的BMS(二)
电量(SOC)算法除了参数的监控与保护之外,作为BMS系统,其中最重要的功能还有一项,那便是SOC的计算。 SOC,全称是State of Charge,系统荷电状态,也叫剩余电量,代表的是电池使用一段时间或长期搁置不用后的剩余容量与其完全充电状态的容量的比值,常用百分数表示。 其取值范围为0~100,当SOC=0时表示电池放电完全,当SOC=100时表示电池完全充满。 那么SOC有什么意义呢? 任何一个产品,对于一般的终端用户而言,如果对其直接提供电压、电流之类的
2021-02-07 10:14:41 4624 12
原创 电池管理系统之神奇的BMS(一)
什么是BMS?首先必须弄懂一个定义,什么是BMS? BMS其实就是BATTERY MANAGEMENT SYSTEM的缩写,中文名字叫电池管理系统,顾名思义,是专门用来进行锂电池运行管理的模块,对象是锂电池。 对于一般的终端用户而言,锂电池保护板其实并不存在,或者说,他们并不知道正在自己使用的产品中还有这么一个东西。比如说电动车,100%的用户都知道电动车上面有电池,因为电池提供了能源,但最多有1%的用户知道还有锂电池保护板这个东西的存在。 BMS的存在感之所以如此低,完全是因为它
2021-02-07 09:34:28 5738
原创 最全面的C结构体的初始化和赋值
1.结构体的初始化结构体是常用的自定义构造类型,是一种很常见的数据打包方法。结构体对象的初始化有多种方式,分为指定初始化、顺序初始化、构造函数初始化。假如有如下结构体。struct A{ int b; int c;}(1)指定初始化(Designated Initializer)实现上有两种方式,一种是通过点号加赋值符号实现,即“.fieldname=value”,另外一种是通过冒号实现,即“fieldname:value”,其中fieldname为指定的结构体成员名称。前一种是C99标准引
2020-11-05 11:27:31 3191
原创 结构体的高端用法——按位存储
结构体平时我们编程的时候结构体的使用是非常多的,今天就介绍一种结构体的高端且特别实用的用法,按位存储。一般结构体:struct xxx { 成员 1 类型 成员 1 ; 成员 2 类型 成员 2 ; 成员 3 类型 成员 3 ; }; 我们知道结构体是会以对其的方式来存储的,那么这三个成员所占的存储空间就以最大类型空间乘3来计算,这样的话有时就会很浪费地址空间,如果三个成员类型都一致的情况下,
2020-11-05 11:22:09 2547
原创 UCOSII操作系统 第6课—事件控制块
1、任务和任务,任务和中断子程序是如何进行通信的?–事件控制块事件控制块使用的几点须知:(1)任务或者中断服务子程序可以给事件控住块ECB发送信号。(2)中断服务子程序不能等待事件控制块ECB给它发送信号的。(3)等待事件可以设置超时时间,后面会详细的说明实现的原理。(4)多个任务可以同时等待同一个事件发生,在这种情况下面,当事件发生后,所有等待该事件的任务中,只有优先级最高的任务得到该事件并进入就绪状态。2、事件控制块的结构(1)只有当所定义的事件是消息邮箱或者消息队列的时候才能使用,当所定
2020-11-04 16:02:29 432
原创 UCOSII操作系统 第5课—时间管理
1、UCOSII的定时中断(1)绝大多数的内核要求提供定时中断,以实现延时与超时控制等功能。这个定时中断叫做时钟节拍。(2)时钟的中断子程序ISR和时钟节拍函数OSTimeTick()该函数用于通知UCOSII,发生了时钟的节拍中断。2、UCOSII的5个关键的时钟函数(1)OSTimeDly();后面的4个函数可以根据需要进行配置使用(2)OSTimeHMSM();(3)OSTimeDlyResume();(4)OSTimeGet();(5)OSTimeSet();3、关键的时钟延时函
2020-11-04 15:23:31 312
原创 UCOSII操作系统 第4课—任务管理
1、重讲任务(1)任务可以是一个无限的循环,也可以在一次执行完毕后被删除。这里需要注意的是,任务的代码并不是真正的删除了,而是UCOSII不再理会该任务代码,所以该任务代码不会再执行。(2)建立任务,OSTaskCreate()如果想让UCOSII管理用户的任务,必须先建立任务,可以通过将任务的地址(函数名)和其他参数传递到这2个函数中来建立任务。(3)任务可以在多任务调度之前开始建立,也可以在其他的任务中创建需要的任务。但是有一点需要注意的是,在启动UCOS之前必须至少得建立一个任务。2、分析
2020-10-30 16:53:16 496
原创 UCOSII操作系统 第3课—UCOSII启动过程
1、初始化UCOSII(1)在调用UCOSII在任何的其他的服务之前,UCOSII要求首先调用初始化函数OSInit();这个函数的目的就是在整个系统启动之前,初始化所有的变量和数据结构。(2)其中,在OSInit()函数中建立空闲任务OS_TaskIdle();这个任务总是处于就绪态的,空闲任务的优先级是设置为最低的。(3)调用OSInit以后,任务控制块缓冲池中有OS_MAX_TASKS个任务控制块,事件控制缓冲区中有OS_MAX_EVENTS个事件控制块,消息队列缓冲池OS_Q中有OS_MAX
2020-10-30 15:18:10 582
原创 UCOSII操作系统 第2课—UCOSII的内核实现
UCOSII操作系统2–UCOSII的内核实现参考书籍:《嵌入式实时操作系统μCOS-II原理及应用》、《嵌入式实时操作系统uCOS-II 邵贝贝(第二版)》1、任务的结构–任务控制块首先这个任务控制块是非常的大的,这里面使用很多的宏定义,估计是可以让使用者使用的时候按需配置。(1)任务的关键 OS_STK == 任务的堆栈,用于保存任务的信息,最主要的是保存在程序的运行的SP指针。任务切换的实质就是SP指针的变化,通过SP指针的变化,可以跳转到你想要去的任何的一块不受保护的地址去。(2
2020-10-28 15:08:30 414
原创 UCOSII操作系统 第1课—UCOSII的基础知识
UCOSII操作系统1–UCOSII的基础知识前言:目前比较主流的操作系统有UCOSII、FREERTOS、LINUX等,UCOSII的资料相对比其余的两个操作系统的资料还是非常全面的。此次专栏涉及到的API的使用是非常小的,仅仅作为本人学习的记录。后期也会对比UCOSII说出实现的更多功能的代码。参考书籍:《嵌入式实时操作系统μCOS-II原理及应用》、《嵌入式实时操作系统uCOS-II 邵贝贝(第二版)》学习代码的出处:http://bbs.elecfans.com/jishu_345856_
2020-10-28 11:02:28 971
原创 QT图表QtCharts的使用
什么是Qt图表• Qt图表是专门用来数据可视化的控件• Qt图表包含折线、饼图、棒图、散点图、范围图等• Qt图表也叫QtCharts,之前是不发布的,直到最近几年才发布• 在QtCharts没发布之前,项目开发者都是使用QCustomPlot或• QWT等第三方图表库开发Qt图表控件的• 使用Qt图表时,需要Qt += chartsQT折线图• Qt折线图使用的类是QLineSeries• Qt折线图包含如下几个部分:① 坐标轴(x,y)② 线条③ 参考背景线• 折线图是依附在Q
2020-07-23 15:36:28 1465
原创 QT单例模式的使用
在我们写最简单的c语言的程序时,我们使用全局变量是不是很方便的能在各个不同的函数中对其进行访问,在qt中如果有很多类都需要用到同一个类,能否把这个类定义成全局变量一样,其他类可以一起公用呢?有同学肯定会疑惑说,我在每个用到它的类里面再定义一个不就可以了,但想过没有如果这个类特别占内存,或者用到他的类特别多,是不是就很麻烦了?那么为了解决这种问题,有一个单例模式就应运而生,下面我们简单介绍一下单例模式。什么是单例模式单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。对他的理解可以
2020-07-23 11:00:46 7227
原创 QT界面树形浏览与界面切换简单设计
什么是树形浏览像这种左侧带有可以点击切换页面就是树形浏览,树形浏览在我们做界面的时候经常能够用到并且非常的实用有木有。我们要做的树形浏览是什么样子的首先给你们看一下我们要做的树形浏览大概的样子。多种颜色,各种图标,随心设计,是不是感觉深情气爽,按耐不住内心的躁动瞬间想来一发树形浏览设计了呢?树形浏览设计依赖文件像这种需要提升而来的QT控件,首先我们要拿到树形浏览的.cpp和.h头文件,可自行到官网下载,也可私信小编一键获取。把他们添加到我们的工程即可。image文件主要是要里面的图标文件
2020-07-19 11:20:59 3922 4
原创 QT项目产品打包及产品的发布
为什么要QT打包我们平时吃牛肉不用养一头牛,那么当客户找你做一个QT产品的时候,你做完了怎么给他?你让客户下载一个qt然后打开什么文件夹下的pro工程点击运行看效果?你敢这么做,你就看客户投不投诉你就完了,老板请不请你吃铁板鱿鱼?如果你就是老板,那就当我没说过。什么是QT打包当我们做完QT项目的时候,这个时候需要发布一个单独的exe文件,不依赖qtcreator这个软件的,然后到了任何电脑后可以直接双击运行的,这个时候就用到QT打包了。那么这种时候其实也用到Qt的产品发布:因为exe在编译时使用
2020-07-16 18:10:24 467
原创 如何用QT做串口调试助手Qseriaport类的使用
首先新建工程界面设计在这里我就不做详述了,注意的一点就是接收框是QPlainTextEdit,我把我的整体放上来,有点丑,你们可以自由发挥。在写之前我先把我创建的一些全局变量什么的写出来,免得下面的代码看不太明白:类是这样的:class uartmain : public QWidget{ Q_OBJECTpublic: explicit uartmain(QWidget *parent = nullptr); ~uartmain(); QSerialPo
2020-07-16 15:45:52 915 1
原创 c语言中static和const的作用
static和const的作用是什么无论在面试还是在平时的考试,这个问题出现的频率都是非常高的,但是网上有些解释太过详细,接下来我将给大家总结性的说一下这两个关键字的具体作用。static的作用1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。这句话的意思就是在 static 修饰局部变量的时候就算函数结束,局部变量依然存在且维持其值不变,提升了局部变量的生存周期和全局变量一样长。2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模
2020-07-16 12:14:51 1240
原创 QT使用TCP传输图像或者数据的方法
客户端QTCPsocket使用方法加qmake到工程pro:把 Qtcpsocket用到的qmake 也就是 network 加到我们原来的pro文件中QT += core gui network同时也不要忘记包含头文件#include <QTcpSocket>然后在类里面创建一个指针变量,不要忘记在构造函数中new一下哦,指针不同于普通变量,我们需要new一下为他分配地址空间的。 QTcpSocket *tcpsocket;tcpsocket = new QTc
2020-07-16 10:56:46 9976 15
原创 如何在QT中将Qwidget类提升为USB(uvc)摄像头类的使用
为什么不用QT自带的摄像头类而自己提升一个摄像头类呢?因为现在市场上大部分用的都是UVC摄像头, 因为UVC摄像头 价格低,使用方便;免驱动安装;硬件接线少USB接口通用性强。UVC是一种摄像头协议,USB摄像头基本都是UVC协议的 很多商家都说摄像头”免驱”,并不是真正免驱动,只不过是系统自带这个UVC驱动而已,所以它们敢说”免驱”. 因为UVC摄像头使用非常非常非常广泛,所以很多系统都集成了UVC驱动。提升需要哪些资料支撑此次我们使用的是usbcamera库来操作摄像头:• usbcamera
2020-07-15 21:39:18 2622 5
原创 c++里面使用c语言的正确用法
简单的c++里面使用c语言函数的正确用法c++如何包含c语言的头文件例如如下代码就是在c++中包含c语言的头文件的正确方式。//c++是可以和c混合编辑的 但是c语言的头文件必须用extern 括起来,不括起来可能有时会出错extern "C" { #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h>}
2020-07-10 16:26:53 2742
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人