自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LCD 屏幕成像完整原理

电脑、手机、嵌入式开发板所有屏幕,。

2026-11-14 15:28:34 21

原创 FileZilla 连接 VMware 虚拟机超时:检查桥接网卡

使用 Wi-Fi 就桥接到无线网卡,使用网线就桥接到对应有线网卡。不要选蓝牙或 Wi-Fi Direct 虚拟网卡。,再继续检查网络和防火墙。点击“应用 → 确定”。

2026-11-13 17:38:48 148

原创 FreeRTOS 软件定时器

软件定时器可以设定一个时间间隔。时间到后,FreeRTOS 调用用户提供的,让程序处理超时事件。它由 FreeRTOS 软件管理,和芯片外设里的不同。软件定时器数量主要受内存限制,但回调执行依赖系统 Tick 和定时器服务任务,精度与实时性不如专用硬件定时器。高精度采样、精确波形等场景应考虑硬件定时器。可以把软件定时器理解成一个由系统统一管理的“闹钟”:多个闹钟共用一位管理员,也就是。管理员处理启动、停止、复位等命令;闹钟到点时,由它调用对应回调。

2026-10-27 17:37:08 418

原创 FreeRTOS 任务通知

队列、信号量和事件标志组都需要单独创建一个内核对象。可以把它理解为每个任务自带的一个小信箱:发送方知道收件任务的句柄,就能发通知;接收任务可以等待通知,也可以读取通知值。通知值是 32 位无符号整数。FreeRTOS 10.4.0 起支持每个任务配置多个通知数组项;未指定时通常只有一个。本文使用的等传统 API 默认操作第 0 项。启用任务通知通常需要(一些版本在未定义时默认启用)。多项通知数组由配置;数组项彼此独立,一个任务同一时刻只能阻塞等待其中一项。

2026-10-27 17:35:22 235

原创 FreeRTOS 事件标志组

事件标志组是一组二进制标志位。1把它想成一张“状态表”:某个事件发生,负责该事件的任务就把对应位设为1;其他任务可以等待一位,或等待多个位满足条件。事件组只记录,不保存事件的具体数据。需要传递数据时使用队列;需要“计数几个资源/事件”时,考虑计数信号量。

2026-10-27 17:32:01 271

原创 FreeRTOS 队列集

假设一个任务既要接收队列中的数据,又要等待某个信号量。如果先阻塞等待队列,即使信号量已经到来,它也不能马上去处理。是各个信箱,存放数据或事件令牌。记录“哪个信箱有东西”。先到通知台领通知,再到对应信箱取一次内容。队列集适合“多个来源、统一处理”的场景。它等待的是,不是等所有成员都准备好,也不是向多个任务广播消息。各队列可以保存不同类型的数据,但这不是必须使用队列集的理由;也可以设计带类型标记的消息结构体,用一个普通队列统一传递。

2026-10-22 21:57:33 299

原创 FreeRTOS 信号量

拿走一个令牌。没有令牌时,任务可以选择等待。:归还或放入一个令牌;若有任务在等,内核可以唤醒其中一个。令牌的数量就是信号量的计数值。计数为 0,表示当前没有可获取的令牌。信号量的重点是;若要把具体数据交给另一任务,通常使用队列或任务通知。

2026-10-22 21:45:50 320

原创 FreeRTOS 消息队列

把队列想成一个有固定格数的“收件箱”:发送者把消息放进去,接收者从里面取消息。它既能缓存数据,也能让任务在暂时没有数据或空位时进入等待。可以用于任务之间、任务与中断之间传递数据。一个队列有固定的容量和单条消息大小。可以有多个发送者和接收者,不专属于某个任务。队列 API 内部负责队列操作的并发保护,应用不需要为一次普通发送/接收额外包临界区。默认从尾部发送、从头部接收,形成一条消息被某个接收者成功取走后,其他接收者不会再收到同一条消息;若需要每个任务都收到,要另外设计分发机制。

2026-10-22 21:38:47 294

原创 FreeRTOS 列表和列表项

FreeRTOS 的列表可以理解成一个List_t:管理一串列表项,记录列表长度、当前遍历位置和一个结束标记。ListItem_t:链表中的节点,保存前后节点地址、排序值,以及它属于哪个对象、哪个列表。数组中的成员通常连续存放,数量也通常预先确定;列表节点可以分散在不同地址,运行时可插入和移除。任务会不断创建、阻塞、就绪和删除,所以内核用列表来管理任务状态。

2026-10-17 16:39:01 257

原创 FreeRTOS任务状态查询API函数

任务运行起来后,我们常需要回答这些问题:某个任务现在是什么状态、优先级是多少?系统里有多少个任务?任务栈是不是快不够了?哪个任务占用了较多 CPU 时间?FreeRTOS 提供了一组查询和统计 API,主要用于调试、运行状态监控和性能分析。它们一般不参与业务控制流程;特别是格式化输出类函数会占用额外代码和缓冲区,应按项目需要启用。

2026-10-17 16:34:43 365

原创 FreeRTOS临界段代码保护及任务调度器挂起和恢复

假设任务正在修改一份共享数据,修改到一半时被另一个任务或中断打断;对方又读取或修改了这份数据,就可能看到不完整的内容,甚至造成数据错误。把这段必须完整完成的操作称为。

2026-10-16 17:31:27 107

原创 FreeRTOS中断管理

中断是外设向 CPU 发出的“有事情需要处理”的请求。例如定时器到时、GPIO 检测到边沿时,CPU 会暂时停下正在执行的任务,转去运行对应的中断服务函数(ISR)。处理完后,CPU 再返回被打断的位置继续执行。ISR 不是一个 FreeRTOS 任务。它运行在中断上下文中,因此不能随意调用任务上下文 API,也不应做耗时工作。

2026-10-16 17:23:38 161

原创 FreeRTOS任务挂起和恢复

就像按下暂停键,任务暂时不再参与调度;则让它重新具备运行资格。任务恢复后不一定立刻运行,还要看其他就绪任务的优先级。

2026-10-16 16:56:08 319

原创 FreeRTOS任务调度

单核 CPU 在同一时刻只能执行一个任务。多个任务看起来“同时运行”,实际上是 CPU 在它们之间切换。:决定下一个运行哪个任务。:保存当前任务的运行状态,再恢复下一个任务的运行状态。

2026-10-16 15:51:49 1075

原创 FreeRTOS任务创建和删除

FreeRTOS 提供动态和静态两种任务创建方式。两者都会初始化任务控制块(TCB)和任务栈,并将任务加入就绪列表;主要区别是内存由谁提供。任务函数通常采用以下形式。任务结束时应自行删除,或持续运行;不能像普通函数一样return。

2026-10-16 15:37:08 358

原创 处理器芯片常见类型、架构与代表型号

在嵌入式开发中,STM32、RK3588、i.MX 6ULL 和 DSP 都能“处理数据”,但它们面向的任务并不相同。本文只讨论**承担计算与控制任务的处理器芯片**,按主要用途梳理常见类型,并列出代表芯片采用的处理器架构。

2026-09-28 16:17:09 491

原创 MCU 存储器通用详解:片内、片外存储器及数据存放规则

用通用的 Cortex-M + FreeRTOS说明:MCU 内部和外部有哪些存储器、每种存储器适合保存什么,以及C代码中的函数、变量和配置参数最终会放在哪里。

2026-09-09 12:16:28 296

原创 JSON 与 cJSON 学习笔记

JSON 用对象和数组组织文本数据;cJSON 则帮助 C 语言完成 JSON 的解析与生成。接收 JSON:Parse → 校验字段 → 使用数据 → Delete发送 JSON:Create → Add → Print → free 字符串 → Delete 对象掌握这条流程后,就可以将 JSON 与 MQTT 结合,用于 RT-Thread 设备的数据上报和指令解析。

2026-08-13 14:51:43 178

原创 RTT-MQTT

客户端连接 Broker发布者向 Topic 发布消息订阅者按 Topic 接收消息QoS 决定可靠性与开销它通过 Broker 解耦设备之间的直接连接,非常适合资源有限、网络条件不稳定的物联网系统。

2026-08-12 21:50:32 235

原创 RTT-DFS 虚拟文件系统

DFS(Device File System)是 RT-Thread 的虚拟文件系统框架。它为不同存储设备和不同文件系统提供统一的 POSIX 接口。应用程序:open / read / write / close↓DFS 虚拟文件系统层↓↓块设备:SD 卡 / SPI Flash / NAND Flash ...因此,上层应用通常不必关心底层使用的是 SD 卡还是 SPI Flash,也不用为每种文件系统分别写读写代码。DFS 使用 UNIX/Linux 风格路径:根目录是,例如。

2026-08-12 21:49:07 337

原创 RTT-CAN

CAN 的优势是高可靠、多节点和基于 ID 的优先级仲裁。查找设备 → 打开并配置 → 设置过滤/接收回调 → 收发 CAN 报文 → 关闭设备初学阶段先掌握标准数据帧的收发与中断接收,再逐步学习过滤规则和总线错误处理。

2026-08-11 16:51:17 215

原创 RTT-串口与485总线

UART 负责异步字节收发,RS-485 则让 UART 能在远距离、强干扰、多节点环境中稳定通信。串口中断 → 接收回调释放信号量 → 接收线程读取并处理数据发送前切换为发送,发送完成后切回接收。

2026-08-11 16:50:47 195

原创 嵌入式开发六大岗位:从 MCU 裸机到 Linux 内核

MCU 裸机开发:没有操作系统,自己用主循环和中断安排所有工作。MCU-RTOS 应用开发:使用线程和 IPC 编写产品业务,主要调用现成设备接口。MCU 驱动/BSP 开发:操作寄存器、处理中断,让 RTOS 和硬件连接起来。嵌入式 Linux 应用开发:在用户空间编写界面、网络和业务程序。嵌入式 Linux 驱动/BSP 开发:移植 Linux,并让内核识别和控制板上设备。Linux 内核开发:修改调度、内存、文件系统和网络等 Linux 核心机制。

2026-08-10 20:36:10 1788

原创 RTT-SPI

SPI 适合高速、短距离的数据传输。找到设备 → 配置模式/速率 → 按从机协议发送和接收SPI 配置要匹配从设备,连续命令期间 CS 不能被释放。

2026-08-10 20:21:25 228

原创 RTT-IIC

I2C 的核心是:主机通过地址找到从机,再按照时钟传输数据。在 RT-Thread 中,先查找 I2C 总线,再使用或完成通信。统一框架屏蔽了不同 MCU 的底层差异,让传感器和存储设备驱动更易移植。

2026-08-09 19:50:53 207

原创 RTT-ADC

ADC 用于把“电压”变成“数字”。这种统一的 ADC 设备接口,使同一套应用代码更容易迁移到不同的 MCU 平台。

2026-08-09 19:50:39 201

原创 RTT-Pin设备模型

Pin 设备模型让 GPIO 操作更加统一、简单。输出控制:rt_pin_mode() + rt_pin_write()输入读取:rt_pin_mode() + rt_pin_read()中断处理:rt_pin_attach_irq() + rt_pin_irq_enable()

2026-08-08 21:29:52 196

原创 RTT-IO设备模型

用统一接口屏蔽不同硬件和驱动的差异。对应用开发者来说,只需掌握“查找、打开、读写、控制、关闭”;对驱动开发者来说,则需要实现设备操作函数并完成注册。这样既降低了应用与硬件的耦合,也让代码更容易移植和维护。

2026-08-08 21:25:47 382

原创 RTT-邮箱与消息队列

邮箱和消息队列都用于线程间传递数据。邮箱每次传递一个机器字大小的值,轻量高效;消息队列会复制一段数据,适合传递结构体等完整消息。

2026-08-07 11:05:07 353

原创 RTT学习-信号量、互斥量、事件集

假设低优先级线程 L 持有互斥量,高优先级线程 H 等待该互斥量。此时如果中优先级线程 M 不断抢占 L,H 也会被间接拖延。RT-Thread 会临时提高 L 的优先级,让它尽快完成临界区并释放互斥量;释放后,L 恢复原优先级。这就是优先级继承。临界区应尽量短,不要在持有互斥量时进行长时间延时或阻塞操作。课件说明,互斥量创建接口中的flag参数已不再区分 FIFO 和 PRIO,内核按优先级方式处理。初学时只需抓住三条主线:信号量是计数值,适合资源计数和线程通知;

2026-08-06 13:11:27 869

原创 RTT学习-系统时钟及定时器

系统时钟节拍简称Tick,可以理解为 RTOS 的“心跳”。它用于处理:线程延时;同优先级线程的时间片轮转;定时器超时。它表示系统又经过了一个 Tick。定时器类似闹钟:启动后等待指定 Tick 数,时间到达时执行回调函数。RT-Thread 定时器有两组常用分类。初学时记住四点即可:Tick 是 RT-Thread 所有时间功能的基础;单次/周期决定触发次数,HARD/SOFT 决定回调执行上下文;定时器创建后必须调用;静态定时器使用detach,动态定时器使用delete。

2026-08-06 13:10:59 349

原创 RTT-线程

复杂程序通常可以拆成多个独立任务。例如:线程 A:读取传感器数据;线程 B:把数据显示到屏幕。在 RT-Thread 中,承载这些任务的程序实体就是线程。线程也是系统进行调度的基本单位。要素作用线程名用于区分线程入口函数线程实际执行的代码线程栈保存局部变量和函数调用现场优先级决定线程获得 CPU 的先后顺序时间片同优先级线程轮流运行时的单次运行时长初学线程时,先记住四点:线程由入口函数、栈、优先级和时间片等信息组成;线程创建后必须调用才能参与调度;

2026-08-05 20:13:10 326

原创 RTT学习-双向链表

双向链表是 RT-Thread 内核中的基础数据结构。从 rt_list_t的定义出发,分析链表初始化、后插、前插和删除操作的实现过程,并总结指针修改顺序、时间复杂度及常见误区。

2026-08-05 16:56:24 236

原创 STM32-RS485

RS485 是工业现场非常常见的串行通信接口标准。它并不是一种新的“数据帧协议”,而是在 UART 串口时序的基础上,用差分信号解决长距离传输、抗干扰和多节点组网问题。本文重点整理 RS485 的基础概念、差分总线、TP8485 收发器引脚、常用 HAL 接口以及 STM32 上的配置思路。

2026-08-04 09:49:36 296

原创 STM32-CAN

CAN,全称 Controller Area Network,是一种 ISO 国际标准化的串行通信协议。它最早大量应用在汽车电子领域,后来也广泛用于工业自动化、船舶、医疗设备、仪器仪表等场景。CAN 的核心优势是多主通信、差分传输、可靠仲裁和完善的错误处理机制。

2026-08-04 09:49:09 353

原创 嵌入式通信协议:UART、RS232、RS485、I²C、SPI 、CAN

某一位上,节点 A 发送隐性 1,却从总线读到显性 0,就知道有更高优先级的报文正在发送,于是立即停止发送。单端传输抗干扰能力一般,不能直接组成多节点总线,距离和速度不适合同时做得很高。如果外界干扰同时让 A、B 两线都升高 1V,它们之间的差值基本不变,因此接收结果不容易受到影响。资料中有时会把 7 位地址左移一位并加上读写位,写成“8 位地址”,这是驱动开发中常见的地址混淆来源。传统 RS485 的 32 个单位负载不是绝对节点上限,现代 1/2、1/4、1/8 单位负载收发器可支持更多节点。

2026-08-03 10:57:28 2958

原创 STM32-SPI

接收数据时,MISO 上的数据会随着 SCK 时钟逐位进入移位寄存器,然后进入接收缓冲区。SPI 通信中,主机负责产生时钟 SCK。SPI 的 MOSI 和 MISO 是两根独立数据线,因此可以同时发送和接收数据。SPI 接收时通常仍然需要主机产生时钟,因此底层可能会发送空数据来换取接收数据。主机和从机必须使用相同的 SPI 模式,否则会出现数据错位、读写异常等问题。即使主机只是想读从机数据,也通常需要发送空字节来提供时钟,例如发送。它适合同时发送和接收,例如主机发送命令字节,同时读取从机返回值。

2026-08-02 20:27:03 350

原创 STM32-IIC

AT24C02 是一种 EEPROM 存储器,容量为 2K bit,使用 IIC 通信。EEPROM 的特点是掉电后数据不丢失,因此常用于保存少量配置数据,例如:设备参数校准数据用户设置运行标志产品序列号。

2026-08-02 19:29:47 388

原创 STM32-DAC

当写入新的数字量后,DAC 输出并不会瞬间稳定到目标电压,而是需要经过一段建立时间。输出频率越高、波形变化越快,对建立时间要求越高。时,DAC 可以产生 DMA 请求,使 DMA 自动把内存中的数据搬运到 DAC 数据保持寄存器。如果让 PWM 信号经过低通滤波器,滤除高频交流谐波,只保留直流分量,就可以得到一个近似模拟电压。分辨率表示 DAC 输出模拟电压的最小增量,通常用二进制位数表示,例如 8 位、12 位等。DAC 常用于波形发生、音频输出、模拟控制电压输出、传感器模拟、比较器参考电压生成等场景。

2026-08-01 19:07:51 391

原创 STM32-ADC

单片机本身处理的是数字量,而现实世界中的很多信号都是模拟量,例如电压、温度、光照、压力、电流等。采样时间过短时,ADC 采样电容可能还没有稳定到输入电压,导致转换结果偏差变大。使用 DMA 的目的,是及时把转换好的数据传输到指定内存中,防止数据被覆盖,也减少 CPU 频繁读取 ADC 数据寄存器的负担。分辨率表示 ADC 能辨别的最小模拟量,通常用二进制位数表示,例如 8 位、10 位、12 位、16 位等。实际电路中,可以利用光电流变化,并串联电阻,把电流变化转换为电压变化,再由 ADC 读取。

2026-08-01 16:17:53 718

空空如也

空空如也

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

TA关注的人

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