![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式C语言
文章平均质量分 59
unique_jie
怕什么真理无穷,进一寸有进一寸的欢喜
展开
-
C++ 超详细知识点梳理+思维导图
本文为博主复习完C++基础知识后总结的知识点,重要知识点都有简单demo示例。欢迎,思维导图层级太多,页面上放不下,若有需要直接哦。原创 2023-03-30 23:14:44 · 3156 阅读 · 2 评论 -
C语言中不透明指针和对象
在C语言中,如果我们想实现类似于面向对象的方法,把接口API暴露给使用者,而内部数据隐藏起来私有。该怎么办呐?本文介绍一种实用的设计模式,使用不透明指针(句柄)实现类似于面向对象的操作。原创 2022-11-26 23:44:59 · 854 阅读 · 0 评论 -
QEP_FSM有限状态机框架
文介绍一种新的有限状态机的实现方法QEP, 是一种基于事件的状态处理方式,本文介绍该状态机框架的C语言实现方式。QEP是QP框架的一个组件,这里简单介绍一下QP框架。QP(Quantum Platform, 量子平台,简称QP,)是一个用于实时嵌入式系统的软件框架,QP是轻量级的、开源的、基于层次式状态机的、事件驱动的平台。原创 2022-10-23 23:16:50 · 2162 阅读 · 0 评论 -
VSCode 配置C/C++开发环境
本文介绍使用vscode配置C/C++开发环境。原创 2022-10-11 22:58:25 · 772 阅读 · 0 评论 -
一个好用的软件定时器模块MultiTimer
在嵌入式软件中,常常采用顺序式的编程结构。有一些需要定时执行的逻辑在主程序中不断的进行轮询时间,时间到了执行程序。这样程序中会存在大量的时间变量不方便统一处理,以一种比较分散的方式进行计时以及时间清零的操作。本文介绍一个好用的定时器模块,将计时服务进行统一管理,通过回调函数的方式执行定时的相关逻辑。原作者0x1abin,源代码https://github.com/0x1abin/MultiTimer致敬原作者!本文在arduino UNO开发板上试用了定时模块代码,进行了略微的修改,模块代码包含原创 2022-05-04 18:21:15 · 1122 阅读 · 0 评论 -
一个好用的按键驱动模块
MultiButton 是一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构,去除冗余的按键处理硬编码,让你的按键业务逻辑更清晰。原创 2022-04-27 21:57:41 · 773 阅读 · 0 评论 -
C语言——链表的使用
C语言——链表的使用链表是一些包含数据的独立数据结构(通常称为节点)的集合。链表中的每个节点通过链或指针连接在一起。程序通过指针访问链表中的节点。通常节点是动态分配的。创建链表对于一个处理链表的程序而言,各节点在物理上是否相邻并没有什么区别,因为程序始终用链从一个节点移动到另一个节点。#include <stdio.h>#include <stdlib.h> #include <string.h> #define TSIZE 45 struct f原创 2021-10-27 23:42:44 · 1157 阅读 · 0 评论 -
C语言面向对象编程
C语言面向对象编程面向对象的编程支持封装、继承和多态三种特性,通过这三种特性,来理解什么是面向对象。封装:通过采用封装特性,把一组相关联的函数和数据圈起来,使圈外面的代码只能看见部分函数,数据则完全不可见。在.h文件中定义数据结构以及函数,在程序文件中实现。本例中数据结构在.h文件中定义。typedef struct{ double x; double y;}ST_POINT_T;extern ST_POINT_T* creatPoint(double x, double y);ext原创 2021-10-10 20:01:44 · 171 阅读 · 0 评论 -
嵌入式C语言_环形存储(Ring/Circular Buffer)
嵌入式C语言_环形存储(Ring /Circular Buffer)基本原理在嵌入式开发的串口收发数据处理时,常常使用环形存储结构,将中断接收数据进行缓存,以防止在数据处理过程中可能产生的数据覆盖,造成数据丢失。环形存储是我们定义的一段首位相连的数据存储方式,通过头和尾索引数据,进行数据的写入和读取。因而,环形存储结构的关键要素包含:数据存储buffer,buffer的大小,头和尾。如下图所示,定义一个buffer,大小为12,初始化状态,头和尾的索引都在0号存储单元,当写入数据时,头指针进行偏移,读原创 2021-09-06 23:17:46 · 2393 阅读 · 1 评论 -
C语言_有限状态机(FSM)
C语言_有限状态机(FSM)基本介绍许多小型或复杂的应用程序都使用有限状态机 (FSM),C 语言中的有限状态机是嵌入式系统的流行设计模式之一,有限状态机使开发变得容易和顺利。有很多设备使用事件基态,如咖啡机、自动售货机、POS 设备、门锁系统等。一些 POS 设备使用事件表,在事件表中使用事件处理程序注册事件,通过相关条件触发事件的执行。本文中,使用C语言创建一个简易的ATM状态机。 ATM 机的状态可以通过即将发生的事件进行更改。ATM状态机包含以下几个状态:Idle StateCard原创 2021-09-04 22:28:00 · 6688 阅读 · 4 评论 -
PID调节的C语言及MATLAB实现方法
在模拟控制系统中,控制器最常用的控制规律就是PID控制,控制系统的原理框图如图所示:在实现PID控制的过程中,关键的部分除了PID三个参数之外,就是system和系统反馈了,需要能够拿到系统当前的输出,才能够形成一个闭环的反馈控制系统,而system就是系统本身的特性,表征系统自身的输入与输出之间的关系,从而能够将PID控制器的输出叠加到系统输出上。将连续系统进行离散化处理,就能得到PID在离散系统中的表达。C语言中构建PID控制器如下:typedef struct { /* Cont.原创 2021-08-29 15:56:20 · 2077 阅读 · 0 评论 -
C代码单元测试(三)_Google cmockery阅读
执行测试程序_Test ExecutionCmockery 单元测试程序使用void function(void **state)函数,使用unit_test*()宏定义函数初始化带有测试用例的函数指针的表#define unit_test(f) { #f, f, UNIT_TEST_FUNCTION_TYPE_TEST }然后将表传给runtest执行#include <stdarg.h>#include <stddef.h>#include <set原创 2021-08-21 22:52:20 · 258 阅读 · 0 评论 -
C代码单元测试(二)
本文介绍google的C代码单元测试框架Cmockery ,根据官方介绍,Cmockery是一个用于简化C应用程序单元测试代码的轻量级库。A lightweight library to simplify and generalize the process of writing unit tests for C applications.源码连接Cmockery 测试与 Cmockery 库、标准 C 库和被测试的模块链接,被编译成独立的可执行文件。尽管代码的实际目标运行环境与测试环境有所差别原创 2021-08-15 23:47:35 · 505 阅读 · 0 评论 -
C代码单元测试(一)
代码的单元测试是一个运行被测代码并且将实际输出与期望输出进行比较的过程,本文使用一个简单的例子记录代码测试的基本想法。typedef struct{ int output; int a; int b; int(*unit_test)();}ST_UNITTEST_T;创建一个单元测试,包含两个输入一个输出以及一个指向被测函数的函数指针// add a testST_UNITTEST_T *addTestFun(int(*TestFun)(int, int), int a, in原创 2021-08-15 14:42:38 · 1257 阅读 · 1 评论 -
嵌入式C代码日志框架
在C代码的日常调试或者测试过程中,常常需要通过打印来输出代码运行过程中的一些状态,以便了解程序运行过程中到底进行了什么样的动作,因而在整个项目中将会存在大量日志输出的操作,而正式工程的输出并不需要这些。在发布正式程序时需要屏蔽这些操作,而在调试时又需要打开这些代码。通过宏定义能够快速注释和取消注释,但是会存在大量的判断语句。本文将通过可变参函数的方式实现这种日志管理,以printf打印输出为例:#include <stdio.h>#include <stdarg.h>#原创 2021-08-15 18:40:40 · 592 阅读 · 0 评论 -
C语言函数指针——回调函数的使用
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。#include <stdio.h>typedef struct{ int status; void (*fun1)();}ST_TEST_T;ST_TEST_T st_test;void add_callb原创 2021-08-11 17:24:06 · 272 阅读 · 0 评论