自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 FreeRTOS内部机制理解(事件组)(六)

队列是数据资源个数是信号量互斥使用 互斥量并且包含优先级继承如果一个任务是等待两个事件,那么就需要使用事件组,也就是需要两个事件触发。而刚好今天开发的程序就是这个样子,在表示烘干合作消毒健闪烁开始5秒闪烁的时候,就是使用了两个条件,一个是消毒工作标志位,一个是闪烁标志位,之所以是闪烁标志位是因为开始5秒是闪烁的,后面需要常量,因此就增肌了一个闪烁标志位,然后又会使用一个具体实现闪烁的标志位,也就是所有的闪烁都是基于这个标志位实现。

2025-10-23 11:39:47 908 1

原创 基于ESP32单片机开发WIFI基础概念理解

WiFi和蓝牙既是无线通信技术标准,也是实现这些技术的物理芯片。特性WiFi芯片蓝牙芯片​技术本质​无线局域网(WLAN)技术无线个人区域网(WPAN)技术​主要使命​​高速、大流量数据传输,提供网络接入​短距离、低功耗的设备互联​通信距离​通常可达30米以上,甚至更远标准传输距离约10米​(部分增强版可达100米)​数据传输速率​高(可达数百Mbps甚至更高)相对较低(经典蓝牙1Mbps,低功耗蓝牙侧重低速率)​功耗表现​相对较高​低功耗。

2025-10-23 11:38:52 848

原创 嵌入式开发模块化编程中应该需要理解的一些编程思想(变量、函数、类型定义去阐述编程思想)

基于变量、函数、类型定义去阐述编程思想一般都是在.h文件。相当于是自己DIY一个不拘泥于C语言提供的char、int的类型变量。枚举(enum)、结构体(struct)、联合体(union)和类型别名(typedef)属于类型定义,它们的处理方式有所不同。

2025-10-15 09:32:43 915

原创 嵌入式开发Bug---HardFault_Handler及空指针导致的死机问题通过栈回溯调试分析

Bug—HardFault_Handler及空指针导致的死机问题分析任务功能模块的参数是NULL/* 添加业务功能模块 */会出现错误除数为0while (1)表面原因是:1、空指针导致的错误,2、除数为0也会导致这种情况。3、Systick中断函数执行时间太长,导致的本质原因分析:当然可能也会存在其他情况的导致所以重要的是学会分析,或者是遇到这种错误应该从哪里分析。产生Hard Fault的原因硬件方面常见原因:1.电源设计有错误,造成器件供电不稳;

2025-10-04 11:11:15 1096

原创 C语言(FreeRTOS)中堆内存管理分析Heap_1、Heap_2、Heap_4、Heap_5详细分析与解析(二)

内存管理。

2025-10-03 02:03:10 847

原创 C语言(FreeRTOS)中堆内存管理分析Heap_1、Heap_2、Heap_4、Heap_5详细分析与解析(一)

内存管理。

2025-10-03 02:02:27 1332 1

原创 FreeRTOS---任务级和中断级临界区管理使用的理解与源码分析

不管是任务级或者是中断级,他们操作的本质都是BASEPRI寄存器,通过该寄存器进行管理。任务级使用的时候都是配对使用,只不过来说任务级的没有那么复杂,或者说简单、自动一些,那相对来说功能就没有那么复杂。FreeRTOS 的设计哲学是将中断分为两个明确的阵营:​不受管理的中断 (优先级 0-4)​​:用于处理最紧急的硬件事件(如看门狗、电源故障、高速采集)。这些中断完全不受​ FreeRTOS 控制,拥有最高的实时性,但相应地,​绝对禁止调用任何 FreeRTOS API。​。

2025-09-26 16:06:19 1558

原创 C语言关键字---Define使用及FreeRTOS滴答定时器中断宏的部分源码解读

C语言中的#define是一个预处理指令,主要用于定义宏​(macro)。宏的本质是编译前的文本替换,这为代码编写提供了灵活性和便利性,但也需要谨慎使用以避免陷阱。单纯的文本替换例如在编译之前,看到就会被替换成。起到的作用就是文本替换的作用。类别用法示例核心注意事项​定义常量​#define 宏名 替换文本宏名通常全大写;末尾不加分号;只是文本替换,不分配内存,无类型。​带参数宏​#define 宏名(参数) 替换文本​参数和整个表达式务必用括号括起来,否则可能因运算符优先级产生意外结果。

2025-09-26 11:05:00 897

原创 FreeRTOS临界区管理使用中断的思路(一)

它的主要作用是快速全局地开启或关闭所有可屏蔽的中断,用于保护对执行时序有严格要求的核心代码段(临界区)。特性说明​寄存器类型​ARM Cortex-M 内核中的特殊功能寄存器​​位宽与有效位​32位寄存器,但仅最低位(bit[0])有效,其他位保留且必须写0​功能​​Bit[0] = 1: 屏蔽(关闭)除 ​NMI(不可屏蔽中断)​​ 和 ​HardFault(硬故障)​​ 外的所有可屏蔽中断。​Bit[0] = 0: 使能(开放)所有中断(正常操作模式)。​默认值​复位后默认为 ​0。

2025-09-25 23:50:37 1476

原创 ARM单片机中断及中断优先级管理详解

对于几乎所有的微控制器,中断都是一种常见的特性。中断一般是由硬件(如外设和外部输人引脚)产生的事件,它会引起程序流偏离正常的流程(如给外设提供服务)。当外设或硬件需要处理器的服务时,一般会出现下面的流程:(1)外设确认到处理器的中断请求。(2)处理器暂停当前执行的任务。(3)处理器执行外设的中断服务程序(ISR),若有必要可以选择由软件清除中断请求。(4)处理器继续执行之前暂停的任务。

2025-09-25 17:44:47 958

原创 FreeRTOS任务调度-临界区的理解及分析(如何解决竞态条件)

while (1)也就说两个优先级相同的任务,都执行任务函数Task1​ 执行,发现值为1(可用),但在它即将执行之前,发生了任务切换(例如时间片用完或系统滴答中断)。​Task2​ 被调度运行,它也执行,此时该值仍为1(因为Task1还没来得及修改),于是Task2顺利地将设为0,并执行了printf。当Task2​ 完成操作并设置后,系统可能再次切换回Task1。​Task1​ 从上次被中断的地方继续执行,也就是紧接着执行。​这步操作覆盖了Task2已经将其置1的操作!​。

2025-09-24 20:17:44 1057

原创 FreeRTOS任务调度详解

概念中文含义在 FreeRTOS 中的角色类比解释​Port​移植、端口指使 FreeRTOS 能在特定编译器和处理器架构上运行所需的特定代码层,是连接操作系统核心与硬件平台的桥梁。像是为 FreeRTOS 这个“大脑”安装的“驱动程序”和“身体适配器”。​Yield​让出、屈服指任务主动放弃​ CPU 的使用权,让调度器有机会去运行其他任务的行为。像是工作中你主动说“我这部分做完了,谁需要帮忙?在 FreeRTOS 中,​。

2025-09-24 08:31:32 1359

原创 从C语言关键字(register、volatile)角度理解RAM、ROM及单片机运行原理

显式使用register关键字的做法已经很少见。

2025-09-23 11:14:35 1303

原创 通信基础知识、波特率及波特率区别

在 ​51系列单片机​ 的架构中,xdata 是一个关键字,用于指定变量存储在外部扩展的随机存取存储器(RAM)​​ 中。​为何需要xdata​:51单片机片内自带的RAM非常有限(通常只有128或256字节)。当程序需要处理大量数据(如图像、大型数组、通信缓冲区)时,片内RAM就不够用了。xdata允许程序员使用外部芯片来扩展RAM空间,最多可寻址64KB​。​工作原理与特点​:对xdata存储区的访问需要通过外部数据总线,使用数据指针(DPTR)进行寻址。由于是片外访问,其速度比访问片内RAM要慢。

2025-09-23 11:06:50 903

原创 C语言---零碎语法知识补充(队列、函数指针、左移右移、任务标识符)

u8 type;u8 para;//当前状态//头文件中定义"api_scene.h"u8 read;u8 write;}SCENE_CB;表示的是每一个数组中的元素都是一个结构体。u8 type;u8 para;​:是事件的“标签”,决定了如何响应。事件类型标识作用type字段用于区分不同种类的事件(例如键盘输入、鼠标点击、定时器触发等)。它是一个整型或枚举值,每个值对应一种特定的事件类型。​示例​:若type = 1表示键盘事件;type = 2表示鼠标事件;

2025-08-30 16:09:54 1082

原创 嵌入式硬件电路分析---AD采集电路

AD采集。

2025-08-30 16:06:37 4490

原创 FreeRTOS内部机制理解(任务调度机制---信号量、互斥量)(五)

写的思路跟读的思路是一样的,都是需要多个操作。1、关中断2、有空间,3、没有空间,要么返回错误,要么休眠(愿意等待)休眠就是:将自己放到等待写的队列中,然后还需要将任务放到DelayList中,这是链表是内核进行管理的。DelayList放的是整个的写任务。4、有空间会执行,(或者被唤醒就执行)写数据,唤醒读数据的任务,也就是链表中的任务,首先就是从这个链表中的第一个任务给去除掉。对应的就是这段代码:然后将这个任务从DelayList移动到ReadyList。当没有数据的时候,需要等待,但是应该等待多久

2025-08-29 08:42:37 854

原创 FreeRTOS内部机制理解(任务调度机制---队列)(四)

队列是应用。

2025-08-29 08:42:02 984 3

原创 FreeRTOS内部机制理解(任务调度机制)(三)

任务调度FreeRTOS源码。

2025-08-27 17:44:18 851

原创 FreeRTOS内部机制理解(创建任务的核心:任务结构体)(二)

阅读FreeRTOS源码分配TCB结构体分配栈在栈中写入函数地址、参数。

2025-08-27 17:43:31 1001

原创 FreeRTOS内部机制理解(栈空间作用分析)(一)

本专题主要的目的是理解FreeRTOS的内部机制。这里其实也算理解了我们写的代码在CPU内部是怎么执行的了。

2025-08-25 08:16:18 1462

原创 FreeRTOS入门知识(资源管理浅析)(八)

涉及到中断等资源管理。

2025-08-25 08:15:51 853

原创 FreeRTOS入门知识(任务通知(二)以及定时器浅析)(七)

简单分析一下任务通知针对FreeRTOS的定时器初步认识。

2025-08-20 18:11:37 889

原创 FreeRTOS入门知识(任务通知(一))(七)

队列、事件组、信号量、互斥量(信号量的另外一个版本,还可以解决优先级反转问题)使用上述的表示信号的内容,都需要对应的结构体,并且还需要进行相关配置。

2025-08-20 18:10:33 968

原创 FreeRTOS入门知识(事件组)(六)

不管是使用互斥量、队列、信号量本质都是调用API。内部的实现暂时还没有搞明白,也不需要,还是那句话,一定要先有思想,有调用API的思想,并且也要有OS系统开发的思想,因为既然是OS系统开发,其实更多的就是先学会灵活的使用API,如果这些信号量没有封装好API,还需要我们自己实现,那他还怎么称之为OS。带着这种思路在去体会FreeRTOS中的API要更能接受一点。队列、互斥量、信号量都是解决的单个事件,但是解决多个事件的情况,因此引入事件组。

2025-08-12 20:13:20 726

原创 嵌入式系统分层开发:架构模式与工程实践(四)(状态机的应用和面向对象的编程)

在C语言模块化编程中同样要使用面向对象的思想。在模块化编程中,在系统架构中需要一个专门负责状态管理与状态转换逻辑的抽象层次。它是基于有限状态机(Finite State Machine, FSM)的理论模型,用于简化复杂系统的行为控制,将一个系统的控制状态跳转全部交给这个FSM层处理,此外在设计控制对象中,还需要关注如何构建一个控制体。FSM层是系统设计中专责状态转换的核心抽象层,通过状态→事件→动作的链式响应,将复杂行为分解为可控单元。

2025-08-12 20:12:49 1184 2

原创 FreeRTOS入门知识(信号量与互斥量)(五)

信号量与互斥量分析学习了队列以后,其实有时候不需要那么复杂,那我们就只需要使用一些简单的,例如信号量的使用。队列相当于是一个传动带。信号量就是相当于是一个计数值,只是通知作用。大大简化了队列的复杂度,并且信号量的核心就是计数值大小,加1就表示信号来了。减1就表示信号被使用了(就是通知到位了,相关任务已经执行)。不代表数据,只是表示资源的数量,是否通知到位。就相当于你在工作中,你有时候无能为力,只能进行一些通知,通知一些人干一些事情,你只需要保证通知到位,而信号量就是有点这个意思,就是保证通知到位就行。

2025-08-10 23:23:14 833

原创 FreeRTOS入门知识(初识RTOS中的队列API)(四)

体会FreeRTOS中的开发思维与裸机开发思维的不一样之处。

2025-08-10 20:11:17 1732

原创 嵌入式知识日常问题记录及用法总结(一)

嵌入式C语言中,一些常见的问题总结。

2025-08-09 22:34:26 851

原创 FreeRTOS入门知识(初识RTOS任务调度)(三)

持续更新中。

2025-08-09 20:36:23 950

原创 FreeRTOS入门知识(初识RTOS)(二)

持续更新中FreeRTOS(或任何RTOS)的核心价值在于它内置的调度器。开发者负责创建任务(窗口)、定义任务要做什么(窗口里的内容),但 ​​“何时运行哪个任务”这个关键决策是由调度器自动完成的。应用程序员无需(也不应该直接干预)具体调度算法(如优先级调度、轮转调度)的执行时刻。就像在 Windows 上,你决定打开什么程序(创建任务/窗口),聚焦哪个窗口(手动选择前台任务),最小化窗口(挂起任务),但你不用关心操作系统底层是如何安排 CPU 时间片给各个进程/线程的(调度器的微观实现)。

2025-08-08 23:30:42 1117

原创 FreeRTOS入门知识(初识RTOS)(一)

代码框架暂时停止更新,因为有一部分内部不是很理解,等完全理解后,重新恢复更新模块化编程思想。先开一个新坑,FreeRTOS缓慢更新中…

2025-08-08 23:23:15 1283

原创 嵌入式通信协议解析(基于红外NEC通信协议)

对于红外按键数据的接受。

2025-08-03 23:18:33 2052

原创 嵌入式系统分层开发:架构模式与工程实践(三)(HDL层和FML层区别)

BSP层(Board Support Package,板级支持包)—搭舞台的工人(配置硬件环境)HDL层(Hardware Driver Layer,硬件驱动层)—操作设备的技工(读写寄存器)FML层(Functional Model Layer,功能模型层)—设备管理员(统一操作标准)本文将讲解FML层,说明为什么要使用这个层,这个层的目的是什么?主要是从理论层面彻底分析透彻FML和HDL的区别,同时会引入一点BLL层。本篇文章注重理论分析。

2025-08-01 08:12:33 1472 1

原创 嵌入式系统分层开发:架构模式与工程实践(二)(基于LED控制初步总结篇)

目前笔者以GD32F303为处理器的开发板实现了GPIO初始化功能、滴答定时器功能、LED扫描显示功能,任务创建功能,在实现的过程中严格按照分析的五层代码框架实现相关功能。

2025-08-01 08:11:44 993

原创 嵌入式系统分层开发:架构模式与工程实践(二)(创建任务篇(二))

继续分析。

2025-07-30 21:20:09 867

原创 嵌入式系统分层开发:架构模式与工程实践(二)(创建任务篇(一))

继续分析HDL层,因为HDL涉及内容很多,需要逐一分析应用场景。首先我们需要创建一个结构体对象structvoid *para;}timerCB_t;首先就是一个典型的嵌套结构体。外层结构体timerCB_t通过typedef定义了一个名为timerCB_t的类型,包含两个成员:​内层结构体数组​:表示最多支持个定时器实例。​:作为全局时间基准计数器(通常由硬件中断驱动,每毫秒或固定周期递增)。​内层结构体(匿名)​​struct {// 定时器初始计数值(周期)

2025-07-30 19:17:24 856

原创 嵌入式系统分层开发:架构模式与工程实践(一)

根据自己工作知识,分享如何一步步搭建框架,实现模块化编程,应对不同情况下的项目开发。个人认为一个软件架构应该分为以下五层:BSP层(Board Support Package,板级支持包)—搭舞台的工人(配置硬件环境)HDL层(Hardware Driver Layer,硬件驱动层)—操作设备的技工(读写寄存器)FML层(Functional Model Layer,功能模型层)—设备管理员(统一操作标准)BLL层(Bussines Logic Layer,业务逻辑层)—

2025-07-29 21:30:50 1704

原创 PID控制原理分析及应用(比例、积分、微分的一些控制想法)(二)

在分析比例、积分、微分控制的同时,会引入一些自己的想法。

2025-07-29 10:49:04 2025

原创 51核和ARM核单片机OTA实战解析(二)

本篇文章主要是从代码实现角度去进行分析。

2025-07-27 17:15:23 1576

空空如也

空空如也

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

TA关注的人

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