自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 单片机任务规范处理-消息地图

在嵌入式单片机开发过程中难免会遇到一种情况(根据不同的状态执行不同的对应处理程序,这一技术称之为消息地图):通过一个通道如串口接收到不同的命令,而这个时候就需要根据不同的命令去处理对应的任务。如果需要实现这个情况可以用if/else、switch-case去实现,但是我觉得这些都不是特别方便后续的扩展和管理,后面了接到了函数指针,发现可以通过遍历数组的方式匹配任务ID再调用对应的函数指针,那么就可以通过一张类似表格的东西去管理任务了。最后编写一个消息地图遍历函数。再建立一张消息地图表格。

2023-04-07 16:18:49 216

原创 从0开始写bootloader

IAP(OTA)

2022-07-12 22:19:59 1882 1

原创 关于指针变量运用的记录

指针变量的应用

2022-06-11 11:12:48 187

原创 单片机状态机笔记

单片机状态机

2022-06-10 22:15:16 371

原创 单片机系统时钟心跳

对单片机时钟心跳的一些理解

2022-06-01 11:36:13 1069

原创 基于时间片的简易任务调度器

依据时间片调度的原理以及根据github上开源项目TMT,将TMT重新按照自己的风格编写了一遍做出了如今的STS(简易任务调度器),并做出一点小小改动,如有兴趣可在github找到TMT开源项目用于学习。头文件/* * @Author: Qiu Weian * @Date: 2022-05-07 19:49:14 * @LastEditors: Qiu Weian * @LastEditTime: 2022-05-08 15:24:26 * @Description: *//*-----

2022-05-09 12:31:21 346

原创 单片机提升代码可读性神器:回调函数

回调函数首先,什么是回调函数?回调函数在个人理解来看就是自己定义了一个函数,然后将自己定义的这个函数的入口地址(即函数名字)当做另外一个函数(中间函数)的参数传入进行对应的处理,那么中间函数在哪里被调用呢?中间函数会在应用层的函数里被调用。上伪代码例子//回调函数1(驱动层)void Led_On(uint8_t Led_Num){ if (Led_Num == 1) //实现LED1灯的点亮 else if (Led_Num == 2) //实现LED2灯的点亮 //....

2022-04-18 21:48:25 1661

原创 单片机内核的一些记录

单片机内核的一些记录1.目前所熟知的两种单片机架构主要有:冯诺依曼架构也称之为普林斯顿架构以及哈佛架构。冯诺依曼架构:此种架构主要是将程序存储器和数据存储器放在了一起,即程序总线和数据总线共用同一个总线,这将意味着程序与数据会共用总线就会无法同时读取程序指令以及数据,降低了cpu的执行效率。哈佛架构:此种架构是将程序存储器和数据存储器分开,也就是程序总线和数据总线都是独立的,cpu可以同时读取程序指令以及数据,大大提高了cpu的执行效率,从而衍生出了流水线概念。2.流水线概念流水线:任何指令的执行

2022-03-25 11:23:28 2198

原创 单片机菜单-菜单数据结构

在单片机中如果需要一个可以便于维护的菜单程序,那么设计一个便于封装的菜单数据结构就是必不可少的了。最近观看B站UP主有手也不会发布的视频后,发现其写的菜单数据结构尤为好用,这里用于记录,有误之处还望大家指正!按键采用Multibutton开源框架有兴趣可去GitHub上搜索,也可私信我,我发源码。struct MenuItem{ unsigned char menu_cnt; //当前菜单项目总数 unsigned char * display_str;

2022-03-17 22:25:36 2908 1

原创 电路接地知识总结

本文总结于B站视频郭天祥老师之姜军老师的接地知识总结记录。大家有兴趣的可以去B站观看视频,有误之处还请大家指正!常见的地集合:GND(电源地)、AGND(模拟地)、DGND(数字地)、SGND(信号地)、PGND(功率地,流大电流)、PE(保护地)、LGND(防雷接地)、FGND(浮地,相对于大地是浮起来的)。功率地:作为负载电路或者驱动电路的回路,具有电流较强、电压较高的特性。热地和冷地的区别:热地:无法直接触摸,会导致触电危险。冷地:可以直接触摸,虽然可能会被电到,但不至于出现生命危险。在开

2022-03-17 12:37:43 3704

原创 单片机滤波算法之一阶滤波

本文用于记录阅读完《匠人手记:一个单片机工作者的实践与思考》一阶滤波算法的记录和心得。一阶滤波算法公式:Yn(本次滤波值)=aXn(新采样值)+(1-a)(上一次滤波值)。a表示滤波系数(在0~1范围之内),此公式用于表达将新采样值与上一次滤波值做一个权重分配,如:a=0.4,那么本次滤波值就会等于新采样值的0.4+上一次滤波值的0.6,如果新采样值猛然突变,那么因为权重的分配,就会降低本次滤波值受到新采样值的突变影响,因为受到权重的限制。//-------------------------

2022-01-08 16:23:07 3845 1

原创 关于单片机(裸机)分层框架的记录

单片机裸机程序如果需要方便移植的话,那么在写程序之前就需要规划好程序框架,在翻阅一些文章之后,发现大多数提及的框架都是大同小异的,接下来总结一下前人经验,提炼一个属于自己的框架,以便后续自己使用。我将程序框架归结为:硬件抽象层,基础协议层(例如IIC/SPI/UART等),模块驱动层,上层应用层,每个层级之间尽量保证是单级调用,尽量保证不出现双向调用,降低程序的耦合度,其示意图如下所示。硬件抽象层:向上提供接口用来反馈硬件情况,如:①按键的硬件抽象层只需要向按键驱动层提供按键是否按下,将之映射到某个

2022-01-08 14:25:53 3352

原创 串口通信那些事儿:通信电平转换电路

通常我们使用串口通信时会出现电平不匹配的时候(例如主控MCU使用2.2V供电,那么其产生的高电平则为2.2V那么如果你要是用串口通信模块,并且是3.3V或者5V供电的模块,那么你会发现串口助手并没有数据被接收到),那么此时便需要一个电平转换电路:其实就是把主机发送的高电平变为接收数据的从机所能识别的高电平而已,就那么简单!如上图所示,如果2.2VMCU发送的高电平直接发送给5V的串口模块,那么串口模块并不认为2.2V是高电平,需要经过电平转换成串口模块所能识别的高电平,比如5V,所以需要电平转换电路。

2021-12-09 21:17:37 10612

原创 记录由PIC单片机DAC引发的问题

PIC单片机IO端口图如下:单片机的IO口的输入输出是相对于数字接口而言,即你设置为数字端口而言才会有输入输出的配置,而当你使用到模拟端口的时候,输入输出可以为同一个模式,如在PIC单片机中,如果使用到DAC,要测量到IO口的电平,则需要将IO口设置未模拟输入,因为在datasheet中没有将IO口设置为模拟输出这一选项,所有需要将IO设置为模拟输入,这时候这是对于模拟模式而言,设置完后可以测量DAC输出电平,如若不设置未模拟输入,则无法测量到DAC输出电平。...

2021-09-16 13:12:57 329

原创 单片机工程编写规范

如下规范仅限于本人自己做记录和参考,有误之处请大家指正。本规范将结合工作遇到的情况持续更新。1.模块化文件格式(.h)文件#ifndef __INCLUDE_H#define __INCLUDE_H/*************************** Includes ***************************//*************************** extern define ********************//**************

2021-07-05 11:38:07 769

原创 Git基本操作

Git 基本操作git add file:将文件从工作区提交到缓存区。git status:显示上次提交更新之后的更改或者写入缓存的改动。git commit -m “info”:将缓存区文件提交到版本库。info:提交文件时所需要附带的提示信息。git diff file:查看在工作区的文件和在缓存区的文件的区别git diff --cached file:查看在缓存区的文件和上一次提交的文件的区别。git reset – hard:回退版本。–hard:参数撤销工作区中所有未提交的修改

2021-06-05 14:39:59 86

转载 快速从git克隆

利用gitee快速从git克隆1.首先注册一个gitee账号2.3456最后等待就可以了,克隆速度远远快于在git上直接克隆。

2021-04-14 11:48:42 145

原创 C语言之宏定义

宏定义的使用宏定义的基本语法:#define 宏名 宏体#表示是预处理命令define是宏命令宏名:是符合C语言变量规则的名字,一般使用大写表示宏体:“替换文本”可以是任意常数、表达式、字符串等预处理会在程序进行编译之前进行处理,而宏便是在预处理的时候处理的,在后面程序中使用到宏时程序会一模一样的将宏体等效替换。宏也分为带参宏和无参宏:①带参宏:#define MIN(x,y) x<y?x:y②无参宏:#define PI 3.1415926宏定义的优点:①方便程序修改

2021-04-06 11:35:40 8058 1

原创 C语言之goto语句

goto语法和用法语法:goto语句也称为无条件转移语句(无视任何情况),其语法为: goto 语句标号; 其中语句标号是按标识符规定书写的符号, 放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto 语句配合使用。loop: while(x<7); goto:loop此例子将在while结束后继续跳转到while从而实现无限循环。注意:C语言不限制程序中使用标号的次数,但各标号不得重名。不推荐使用goto语句的原因:①由于goto语句是无条件跳转指令,使

2021-04-06 10:55:10 2179

原创 时间片轮询+状态机实现裸机多任务

时间片+状态机实现裸机伪多任务注:上述伪多任务是按个人理解命名的,实际上在裸机中跑的还是单线程,只是效果看上去是多线程。时间片轮询方式是把MCU的执行时间划分为一块一块的,然后根据自己的需求去分配这一块一块的时间,而当你的任务(在时间片轮询方法中实现的任务)的执行时间足够短的时候可以实现多线程的现象,效果如下图所示:而当你的任务所需要的的时间不能在一个时间片的情况下完成时,此时就会出现一直在执行某一个任务,而现象则是跟裸机大循环(前后台系统)类似的现象出现,如下图所示:出现此现象的原因跟时间片轮

2021-03-26 11:38:47 4148 2

原创 C语言之位域使用

在单片机的编程中,会使用到一些IC里面的寄存器,而有些寄存器并不是每一位都是有效的,例如:这里的1-3位则是保留的,不可以被操作的。所以在对一些寄存器进行操作时,可以利用C语言的位域操作去实现对寄存器每一位的控制。什么是位域?所谓“位域”是把一个字节中的二进位划分为几 个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。以上图为例,我就可以将一个字节进行划分,划分为APSE占1位,CLKFRQ占3个位,RESERVER为无名位域,CHIPEN占1位,总共占1B(即8b

2021-03-23 10:21:27 1323

原创 时间片轮询系统学习

时间片轮询所谓时间片轮询就是将时间分时,分别分配给不同的任务去执行任务,这个被任务分走的时间就叫做时间片。时间片轮询系统中很重要的一点就是时间片的长度,当时间片的长度过小时,例如设置为20ms,因为在任务切换时,需要保存上下文,这个是需要花费时间的,假设花费为5ms,此时CPU20%(5/20+5)的时间花浪费在了管理开销上(网上查的,这里还不太明白为什么会说这是浪费?这个不是必须存在的吗?无论时间片的长度长还是短,这不是都得存在的?如果有知道的人可以指导一下,后续更新)当时间片设置为500ms,这个

2021-03-13 22:17:26 3390 4

原创 ESP-IDF创建工程

在VScode用ESP-IDF创建ESP32工程1.加载环境后注:加载环境后,可以用idf.py 查看相关命令2.用idf.py create-project filename创建工程3.进入刚刚创建好的工程下,配置目标芯片,我以ESP32为例4.接着就可以写代码然后用idf.py build 编译啦。...

2020-12-29 21:39:48 5657 8

原创 VScode添加头文件路径

VScode中添加头文件路径打开vscode用Ctrl+Shift+P打开搜索框,搜索configuration然后打开c_cpp_properties.json然后在includepath中添加你所需要加的头文件的路径即可。

2020-12-28 19:26:09 5753 1

原创 VI基础

vi基础vi的三种模式:①命令行模式:可以进行复制粘贴等操作。②插入模式:进行文本的编辑,按ESC退出插入模式。③底行模式:在屏幕的最下方,用于执行一些基本操作,如查找、替换等操作。i:从当前光标位置开始插入。 I:在行首进行插入。a:从当前光标之后开始插入。 A:在行尾插入。o:进入编辑状态,并插入一个新行,光标处于新行行首。 O:在光标上方插入一个新行。:进入底行模式。:q :退出没有修改的文件:q!:强制退出:wq:保存并退出:x:保存并退出,等价于wq拷贝粘贴命令:[

2020-12-27 11:59:41 180

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除