- 博客(20)
- 收藏
- 关注
原创 FREERTOS14
链接: https://pan.baidu.com/s/1e2TC9e63XbOgH_EdnDQVWw?例如串口接收数据如果处理太慢,可能会丢数据,所以优先级通常应该比 LED 闪烁任务高。是低优先级任务,用来模拟不太着急的后台任务,例如状态打印、LED 心跳灯等。如果发现低优先级任务长期不运行,就要检查高优先级任务是否一直占用 CPU。如果高优先级任务一直不阻塞,那么低优先级任务可能长时间得不到运行机会。高优先级任务如果一直不阻塞,低优先级任务可能饿死。如果打印任务优先级太高,可能影响其他更重要任务。
2026-06-03 09:59:05
193
原创 FREERTOS13
pwd=0000 提取码: 0000。因为有些任务平时栈消耗不大,但在复杂格式化、通信处理、异常处理时会突然消耗更多栈。任务中的局部变量、函数调用、临时数据等都会占用任务自己的栈。任务栈太小可能导致程序卡死、HardFault、串口异常。任务栈太小时,任务运行过程中可能会写出自己的栈空间范围。串口打印任务建议给更大的栈,比如 256 Words。在 FreeRTOS 中,每个任务都有自己的栈空间。所以 FreeRTOS 项目中必须重视任务栈大小。如果这个数组写在任务函数里面,它会占用当前任务栈。
2026-06-02 10:17:08
193
原创 FREERTOS12
链接: https://pan.baidu.com/s/17W-e6_C76_arUrtXDDJoXw?如果中断中调用 FreeRTOS API,要注意中断优先级。等待通知时,任务进入 Blocked 状态,不占用 CPU。调用 FreeRTOS API 的中断优先级不能设置得太高。不是所有 FreeRTOS API 都能在中断中调用。因为 STM32 中优先级数字越小,中断优先级越高。如果 20 ms 后仍然是低电平,说明按键确实按下。这个任务负责等待按键中断通知,并通过串口打印。
2026-06-02 10:16:34
188
原创 FREERTOS11
任务通知是一种轻量级的任务间通信机制,每个任务本身就自带任务通知标志位,不需要额外创建信号量或事件对象。本节实验中, 每隔 1000 ms 发送一次任务通知, 等待通知并通过串口打印。notifyTask 发送通知后,receiveTask 被唤醒并执行打印。等待通知时任务可以进入阻塞状态,不占 CPU。如果要多个任务共享多个事件,使用事件标志组。任务通知是直接通知某个任务的轻量机制。每个任务自带通知标志位,不需额外对象。任务通知比信号量、事件标志组更轻量。适合一个任务通知另一个固定任务。
2026-06-01 10:11:48
352
原创 FREERTOS10
链接: https://pan.baidu.com/s/1xDWMk00twH7FlRQeyFgwhQ?本节实验中,软件定时器每隔 1000 ms 触发一次,然后设置事件标志,最后由任务通过串口打印。软件定时器回调函数是在 FreeRTOS 的定时器服务任务中执行的。软件定时器可以在指定时间到达后,自动执行一个回调函数。CubeMX 创建定时器后,通常还需要手动启动。软件定时器可以是单次定时器,也可以是周期定时器。这里的 是定时周期,单位是系统 tick。软件定时器可以在指定时间到达后执行回调函数。
2026-06-01 10:10:31
317
原创 FREERTOS9
链接: https://pan.baidu.com/s/1pWPtTUXBdGpKLVpl02Lu4g?FREERTOS学习笔记九:事件标志组 Event Flags 总结。事件标志组 Event Flags 用来管理多个事件。如果前面已经配置过 USART1,可以继续使用。信号量适合单个事件,事件标志组适合多个事件。表示按位与,用来判断某个事件位是否存在。的作用是等待事件位,并通过串口打印。事件标志组最重要的就是这两个等待模式。事件标志组本质上是一组二进制标志位。每一个 bit 都可以表示一个事件。
2026-05-31 20:31:25
266
原创 FREERTOS8
如果 Task1 正在打印时,Task2 也想打印,那么 Task2 会先等待。它保证 Task1 使用 UART 时,其他任务不能同时使用 UART。因为本节 会被多个任务调用,所以调用它之前需要先获取互斥锁。等 Task1 释放锁以后,Task2 才能继续打印。不要让 Task1 获取锁,却让 Task2 释放锁。锁保护范围不要太大,只保护真正访问共享资源的代码。本节不使用递归互斥锁,只使用普通 Mutex。多个任务同时访问共享资源,可能会造成数据混乱。互斥锁的基本结构是:获取锁、访问资源、释放锁。
2026-05-31 20:28:06
326
原创 FREERTOS7
链接: https://pan.baidu.com/s/1eP67ZG8M8RlacUjHhigV5Q?如果当前计数值是 0,任务再去获取信号量,就会进入阻塞状态等待。如果当前计数值已经达到最大值,再释放信号量,释放操作就可能失败。如果计数值为 0,获取任务会进入 Blocked 状态等待。如果当前计数值等于 0, 进入 Blocked 状态等待。如果当前计数值大于 0,就获取成功,计数值减 1。它不是只有 0 和 1,而是可以有多个计数值。理解计数信号量不会无限累加,有最大计数值。
2026-05-30 17:27:11
203
原创 FREERTOS6
如果没有信号量,等待任务会进入 Blocked 状态,不会一直占用 CPU。如果 CubeMX 生成的信号量初始值本来就是 ,这句代码影响不大。如果初始值是 ,那么 一开始就能获取到信号量,并立刻打印一次。二值信号量主要用于任务同步,也就是通知某个事件发生了。二值信号量常用于任务通知任务,也常用于中断通知任务。一个任务可以释放信号量,另一个任务可以等待信号量。如果信号量已经是 ,再次释放它,结果仍然是。如果需要统计事件发生次数,可以使用计数信号量。本节先用任务释放信号量,是为了更容易理解。
2026-05-30 17:25:39
201
原创 FREERTOS5
队列可以简单理解成一个“数据缓冲区”。一个任务可以往队列里面放数据,另一个任务可以从队列里面取数据。发送任务 ---> 队列 ---> 接收任务任务1:我产生了一个数据,先放到队列里。任务2:我需要数据时,就从队列里取。先进先出先放进去的数据,会先被取出来。123123这一节主要学习了 FreeRTOS 中的队列 Queue。队列用于任务之间传递数据。队列是先进先出的数据缓冲区。一个任务可以使用发送数据。另一个任务可以使用接收数据。
2026-05-26 17:57:18
517
原创 FREERTOS4
所以这一节主要学习如何在 CubeMX 生成的 FreeRTOS 工程中添加串口,并在任务中通过串口打印信息。前面的实验现象有些是通过 LED 观察,有些是通过 Keil 的 Watch 窗口观察变量。后面如果程序复杂了,可以再使用中断发送、DMA 发送,或者专门创建一个串口打印任务。当前任务进入阻塞态后,FreeRTOS 调度器会去运行其他可以运行的任务。如果它的优先级比较高,就可能导致低优先级任务长时间得不到运行机会。如果高优先级任务一直不阻塞,低优先级任务可能长时间运行不到。
2026-05-26 09:45:32
449
原创 FREERTOS3
如果使用的是常见 STM32F103C8T6 Blue Pill 板载 LED,板载可控 LED 通常不是 PA0 或 PA1,而是 PC13。前面讲过,如果两个任务优先级不同,FreeRTOS 会优先运行 Ready 状态中优先级更高的任务。这一节需要两个任务,所以要在 CubeMX 中再添加一个任务,或者在 里面手动添加第二个任务。建议初学时优先用 CubeMX 添加任务,因为它会自动生成任务句柄、任务属性和任务创建代码。但是这个实验里面,任务交替运行的主要原因不是时间片轮转,而是。
2026-05-25 17:33:41
544
原创 FREERTOS笔记2
但是在 FreeRTOS 里面,程序不是简单地从上往下执行,而是由调度器根据任务的状态和优先级来决定哪个任务可以运行。FreeRTOS 的调度规则不是“谁写在前面谁先一直执行”,而是“谁准备好了,并且优先级最高,谁就运行”。如果这个时候任务1也处于 Ready 状态,那么还是任务1优先运行,因为任务1优先级更高。如果任务1的优先级仍然高于任务2,那么任务2大概率不会再正常运行。FreeRTOS 总是运行 Ready 状态中优先级最高的任务。因为任务1的优先级更高,所以 FreeRTOS 会先运行任务1。
2026-05-23 20:06:19
388
原创 FreeRTOS 学习笔记一
FreeRTOS 可以理解为一个运行在单片机上的。它本身并不负责帮我们完成具体业务逻辑,而是负责管理多个任务,让这些任务按照一定规则使用 CPU。决定当前应该运行哪个任务。当多个任务都可以运行时,优先运行优先级更高的任务。当任务主动延时或等待资源时,调度器会切换到其他可以运行的任务。当多个任务都要访问同一个外设,例如 GPIO、UART、SPI、I2C 时,可以通过信号量、互斥锁等机制避免冲突。这样可以防止多个任务同时操作同一个资源造成数据混乱。
2026-05-23 19:54:54
379
原创 逆变式直流稳压电源电路
本电路只是仿真的结果,如果运用到实际还需要实际的数据作为支撑,本文章只作为参考,如果由任何的错误请及时指出值,下面的电压表也是一个固定数值,最终是接近-12V的,因为仿真由一定的误差,这个是没有办法的。本电路只是仿真的结果,如果运用到实际还需要实际的数据作为支撑,本文章只作为参考,如果由任何的错误请及时指出。
2026-05-12 20:28:30
409
原创 倍压器直流稳压电源电路
NE555是精密计时电路,能够实现准确的延时时间和振荡引脚介绍:引脚1:GND,电路的公共接地端,连接电源的负极引脚2:TR,Trigger触发,当这个引脚电压下降到VCC的1/3以下,芯片会启动定时过程,让输出引脚3变为高电平。(注意:有的手册写的是1/2的CONT,而CONT是VCC的1/2,所以是对的,只是表述不一样)引脚3:Q,输出,Output。芯片信号的输出端,可以输出高电平VCC和低电平GND,能够驱动LED、继电器或其它的芯片。
2026-05-06 15:06:13
606
原创 基于LM317的可调式单电源直流稳压电路设计与Multisim仿真
本文基于 LM317 设计了一个可调式单电源直流稳压电路,并使用 Multisim 对其进行了仿真。该电路首先通过桥式整流将 15 V 交流电转换为单向脉动直流电,再通过电容滤波降低纹波,最后利用 LM317 实现可调稳压输出。仿真结果表明,在当前输入条件下,输出电压可以在约 1.5 V 到 17 V 范围内调节。通过本次设计,可以较清楚地理解交流电整流、滤波和线性稳压的基本过程。该电路适合作为学习型直流稳压电源实验电路,但如果用于实际供电,还需要进一步考虑散热、负载能力、保护措施和器件选型裕量。
2026-04-26 18:35:47
1071
原创 固定式单电源直流稳压电路设计
最近在学习直流稳压电源相关内容,我用Multisim搭了一个简单的固定式单电源直流稳压电路,并做了基础仿真。桥式整流电容滤波三端稳压输出本文主要从电路原理、波形变化、器件作用以及工程上需要注意的问题几个方面,对这个电路做一个完整梳理。说明:本文内容以仿真分析为主,暂未进行实物制作与测试。如果文中有不严谨之处,欢迎大家交流指正。
2026-04-24 09:37:21
788
原创 电子元器件-电阻器篇
电阻器通常也称为电阻,是一个为电流提供通路的电子器件,也可以定义为:每单位电流在导体上所引起的电压。(电阻没有正负极之分)电阻(R)= 电压(U)/ 电流(I)
2026-04-21 16:07:47
566
原创 ESP8266 连接 OneNET 云平台实战:AT 固件 + MQTT 接入完整流程
前段时间我做了一个简单的物联网小项目,核心思路就是:让 ESP8266 作为 Wi-Fi 模块,直接通过 MQTT 接入 OneNET 云平台,实现设备上线、订阅平台指令以及上报属性数据。原始过程踩了不少坑,所以这篇文章我把整个流程重新整理了一遍,尽量写成一篇真正能跟着做下来的实战教程。对于刚入门的同学来说,不需要先写单片机代码,只要先把 ESP8266 的联网链路跑通,就已经迈出很关键的一步了。刷好可用的 AT 固件用串口指令先连上 Wi-Fi配置 MQTT 参数接入 OneNET。
2026-04-12 12:32:02
2597
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅