- 博客(49)
- 收藏
- 关注
原创 Radiotap 字段详解
Radiotap 是一种(IEEE 802.11 标准扩展),用于携带物理层(PHY)信息,在数据链路层,位于 802.11 帧(如管理帧、控制帧、数据帧)之前。其核心是结构,字段通过Present位图标识存在性,解析需遵循和。它告诉你接收到的信号强度(RSSI)、数据速率、信道频率等,但它不包含帧的源/目标 MAC 地址(那是 802.11 头部的工作)。
2025-11-26 21:00:26
765
原创 FreeRTOS信号量
本文详细介绍了FreeRTOS信号量系统的各种API函数及其应用场景。主要内容包括:二进制信号量、计数信号量、互斥锁(普通/递归)的创建(动态/静态)、获取、释放和删除操作,以及各API在不同上下文(任务/中断)中的使用限制。重点分析了信号量类型的核心区别(如优先级继承机制、递归特性)、正确使用规则(如释放次数匹配)和常见避坑指南(如中断API的特殊处理)。文章还提供了信号量操作API的全景对比表,帮助开发者根据具体需求(同步、资源保护、事件计数等)选择合适的信号量类型及配套API。
2025-10-27 16:18:48
925
原创 FreeRTOS队列
本文详细介绍了FreeRTOS中队列相关的API函数及其应用场景。重点说明了不同API的使用场景、注意事项及函数间的区别,并提供了典型应用示例。这些队列函数是FreeRTOS任务间通信的核心机制,适用于数据传递、命令控制等多种场景。
2025-10-23 10:09:35
633
原创 FreeRTOS队列消息查询
本文介绍了FreeRTOS中用于查询队列状态的几个关键API函数及其应用场景: 这些API共同构成了FreeRTOS队列状态查询的核心工具集,为任务间通信和中断处理提供了灵活的状态监控能力,使用时需注意任务与中断版本的区别及返回值的瞬时性特点。
2025-10-22 16:59:09
983
原创 FreeRTOS任务通知
FreeRTOS任务通知机制是一组高效的任务间通信API,相比传统信号量、队列等更轻量级,无需额外内存分配。核心API分为发送端和接收端: 发送端包括xTaskNotifyGive(递增通知值)、xTaskNotify(支持5种操作方式)及其多索引版本,以及对应的中断安全版本(FromISR)。接收端包括ulTaskNotifyTake(获取通知值)、xTaskNotifyWait(等待通知)及其多索引版本,以及状态清除API。
2025-10-22 16:30:47
1107
原创 FreeRTOS任务状态获取
和是 FreeRTOS 中用于获取任务自定义标签的 API,分别适用于任务和中断上下文。它们的核心价值是提供一个灵活的自定义字段,用于存储任务类型、状态等信息,简化多任务系统中的任务识别和状态管理。使用时需注意上下文区分,结合进行标签设置,并确保任务句柄有效。合理使用这对函数可提升多任务系统的灵活性和可维护性。是 FreeRTOS 提供的一个高度灵活的 API,用于为任务设置自定义标签(32 位值)。该标签可存储任务类型、状态、钩子函数等任意信息,完全由用户支配,是扩展任务功能、简化多任务管理的实用工具。
2025-10-21 21:12:17
979
原创 FreeRTOS任务状态监控
FreeRTOS任务调试工具摘要FreeRTOS提供多个任务调试API:vTaskList():格式化输出所有任务状态(名称、优先级、栈使用等),需开启configUSE_TRACE_FACILITY和configUSE_STATS_FORMATTING_FUNCTIONS。vTaskGetRunTimeStats():统计任务CPU占用率,依赖高精度定时器(如1MHz TIM2),需配置configGENERATE_RUN_TIME_STATS。vTaskResetState()(非标准API)
2025-10-21 17:04:19
792
原创 FreeRTOS任务句柄/名称/状态信息获取
本文介绍了FreeRTOS中多个关键API函数的功能和使用方法: 任务句柄相关函数,任务状态查询函数,系统状态函数,这些函数可用于任务管理、调试监控、时间计算等场景,使用时需注意调用上下文(任务/中断)、配置要求及返回值含义,是FreeRTOS开发的重要工具。
2025-10-21 15:49:51
993
原创 FreeRTOS调度器
本文介绍了FreeRTOS中四个关键调度器管理函数:vTaskStartScheduler()启动多任务调度,创建空闲任务并初始化系统节拍;vTaskEndScheduler()终止调度器,释放资源并返回单线程模式;vTaskSuspendAll()暂停任务调度但保持中断响应,用于关键操作保护;xTaskResumeAll()恢复被暂停的调度器,并检查是否有高优先级任务就绪。这些函数共同构成了FreeRTOS任务调度的核心机制。
2025-10-21 13:32:24
894
原创 FreeRTOS补计系统节拍
文章摘要: FreeRTOS中的xTaskCatchUpTicks()和vTaskStepTick()是用于修正系统节拍(Tick)的API函数,适用于低功耗或时钟暂停等场景。 xTaskCatchUpTicks():用于批量补计系统暂停期间缺失的Ticks,确保任务延时准确。需配合独立时钟源(如RTC)计算休眠时间,并在调用前后暂停/恢复调度器。 vTaskStepTick():用于手动步进单个Tick,模拟SysTick中断,适用于周期性唤醒的低功耗模式。需确保调度器暂停调用,避免Tick重复计数。
2025-10-21 11:44:18
860
原创 FreeRTOS进入/退出临界区
FreeRTOS提供了两组临界区管理宏:taskENTER_CRITICAL()/taskEXIT_CRITICAL()用于任务代码,通过屏蔽中断实现原子操作保护共享资源;taskENTER_CRITICAL_FROM_ISR()/taskEXIT_CRITICAL_FROM_ISR()专用于中断服务程序,通过保存/恢复中断状态实现临界区保护。两者都支持嵌套调用,但使用时需严格遵守配对规则,保持临界区代码简短,避免调用阻塞函数。
2025-10-21 09:45:08
712
原创 FreeRTOS临时禁用/启用中断
FreeRTOS中的taskDISABLE_INTERRUPTS()和taskENABLE_INTERRUPTS()是配套使用的中断控制宏,用于保护关键代码段。前者临时禁用所有优先级≤configMAX_SYSCALL_INTERRUPT_PRIORITY的中断,确保原子操作;后者恢复中断响应。使用需严格配对且时间极短(10-100微秒),避免影响系统实时性。典型应用包括共享资源访问和防止调度干扰。建议优先使用支持嵌套的taskENTER_CRITICAL()机制更安全。
2025-10-20 21:43:26
748
原创 FreeRTOS手动任务切换
FreeRTOS中的taskYIELD()宏用于主动触发任务调度,使当前任务让出CPU,调度器立即选择下一个就绪任务执行。它适用于同优先级任务协作、防止低优先级任务饿死、避免忙等场景。与vTaskDelay()不同,taskYIELD()不会阻塞任务,而是保持就绪状态。使用时需注意:不能在中断中使用(需改用portYIELD_FROM_ISR()),且过度调用会增加调度开销。该机制通过任务主动协作提升了系统响应性,特别适合优先级任务间的资源合理分配。
2025-10-20 19:54:06
453
原创 FreeRTOS优先级获取与设置
本文介绍了FreeRTOS中任务优先级管理的核心函数组,包括uxTaskPriorityGet()、uxTaskPriorityGetFromISR()、uxTaskBasePriorityGet()、uxTaskBasePriorityGetFromISR()和vTaskPrioritySet()。这些函数提供了任务优先级的查询和设置功能,支持在任务和中断上下文中使用,并区分基础优先级和当前优先级。文章详细说明了每个函数的参数、返回值和使用场景,特别强调了中断安全版本的设计特点。
2025-10-20 17:13:09
1029
原创 FreeRTOS延时中断函数
FreeRTOS的xTaskAbortDelay()函数可以强制中断任务的阻塞状态,立即唤醒正在等待延时或事件的任务。该函数会检查任务状态,若任务处于阻塞状态,则将其从延时/事件列表移除并添加到就绪列表,更新任务状态并可能触发任务切换。使用示例展示了如何通过按键中断任务1的1秒延时阻塞,使其立即恢复执行。该函数仅对阻塞状态任务有效,需要配置INCLUDE_xTaskAbortDelay=1才能使用。
2025-10-20 16:16:17
259
原创 FreeRTOS延时函数
FreeRTOS延时函数:FreeRTOS提供三种延时函数:vTaskDelay()实现相对延时,简单但存在累积误差;vTaskDelayUntil()采用绝对时间基准,适合精确周期任务;xTaskDelayUntil()在V10.4.0+版本新增超时检测功能,能处理计数器溢出并返回执行状态。三者主要区别在于延时类型(相对/绝对)、周期精度、返回值和超时检测能力。使用时需注意:禁止中断调用、确保调度器运行、合理处理时间溢出
2025-10-20 14:58:30
640
原创 FreeRTOS任务挂起与恢复
摘要:vTaskSuspend()和vTaskResume()是FreeRTOS中用于任务挂起与恢复的核心函数。vTaskSuspend()可动态暂停指定任务,保留任务状态但不释放资源;vTaskResume()则恢复被挂起的任务。使用需注意:1)禁止挂起系统关键任务;2)不能在中断中使用;3)挂起任务不释放资源可能导致死锁;4)恢复时任务从挂起点继续执行。示例展示了通过按键控制多个LED闪烁任务的同步挂起与恢复,其中任务优先级和资源管理是关键考虑因素。
2025-10-20 13:53:34
314
原创 FreeRTOS任务创建与删除
是FreeRTOS多任务系统的核心函数,使用需要注意:合理设置栈大小精心规划任务优先级有效管理任务参数妥善处理任务句柄实施健壮的错误处理通过合理使用,可以构建高效、可靠且易于维护的嵌入式实时系统程序。FreeRTOS 的空闲任务和定时器任务空闲任务:负责 “兜底调度” 和 “动态内存回收”,删除后系统无任务可调度或内存泄漏;定时器任务:负责软件定时器管理,删除后定时器机制失效并引发死锁。禁忌。
2025-10-19 23:09:14
945
原创 FreeRTOS移植(STM32F103C8T6为例)
本文介绍了FreeRTOS的源码获取与移植步骤:首先从官网或SourceForge下载源码;然后将平台相关代码(如Keil的heap_4.c)复制到工程,注意选择适配的编译器/内核组合(如ARM_CM3对应Cortex-M3);配置FreeRTOSConfig.h文件进行功能裁剪;最后在中断文件中添加FreeRTOS头文件,关联SysTick中断并注释系统原有中断服务。该过程完成了FreeRTOS在目标平台的基础移植。
2025-10-19 20:52:58
294
原创 GPS-SDR-SIM使用详解
GPS-SDR-SIM 是一款开源工具,能够生成 GPS 基带信号数据流,这些数据流可通过软件定义无线电(SDR)平台(如 ADALM-Pluto、bladeRF、HackRF、USRP 等)转换为射频(RF)信号。简单来说,它能模拟 GPS 卫星信号,帮助开发者或爱好者测试 GPS 接收设备的性能,而无需依赖真实的卫星信号。
2025-10-18 12:25:02
858
原创 LVGL详解
基础对象(lv_obj_t)是 LVGL 的 “万能基类”,它定义了 UI 元素的通用属性(位置、大小、样式)和行为(事件、状态)。所有组件都基于它扩展,因此掌握基础对象的操作是使用 LVGL 的前提。父子层级决定布局和裁剪关系。样式系统控制外观,支持多状态适配。事件机制处理用户交互。所有组件都可视为 “增强版” 基础对象。通过参数,可获取事件相关信息(事件源、用户数据等)。LVGL 事件系统的核心是 “组件 + 事件类型 + 回调函数编写回调函数,定义事件响应逻辑;用。
2025-09-23 19:05:47
1224
原创 存储器与寄存器
Flash存储器是一种可以电可擦除并可编程的存储器,数据在断电后仍然保存。它通常用于各种电子设备,如手机、相机、USB闪存驱动器和固态硬盘(SSD)。
2024-11-02 21:48:25
1711
原创 --no-multibyte-chars解决Keil中文字符编码报错
新版MDK无法支持单中文字符如:const char *p = "你";新版本Keil在使用字库时,编译出现以下报错:提示是什么缺少了一个逗号,把编码改成GBK ANSI UTF-8都一样报错。但是改为成对就不报错了,如:const char *p = "你好";经过多次实验发现:只要是中文字符在MDK新版本中:奇数中文字符会出现以上报错,偶数中文字符则不会报错。
2024-10-26 17:18:23
1744
3
原创 STM32
STM32是意法半导体(STMicroelectronics)推出的一系列基于ARM Cortex-M内核的微控制器。该系列微控制器以其高性能、低功耗和丰富的外设选项而广泛应用于各种嵌入式系统。
2024-10-24 10:41:13
2495
原创 STM32F103C8T6 IO 操作
查找要开启时钟的寄存器,然后通过该寄存器操作时钟的开启或关闭。比如要打开IOPA的时钟就要操作该寄存器的第二位IOPAEN为1,就需要知道RCC_APB2ENR这个寄存器的地址。在 STM32 微控制器中,开启 GPIO 端口的时钟是确保 IO 口可以正常工作的第一步。RCC的基地址是0x4002 1000,APB2ENR的偏移量是0x18,所以。RCC的基地址加上这个寄存器的偏移地址就是这个寄存器的实际地址。找到GPIOx的基地址,再根据偏移地址找到要使用的寄存器的地址。这样就开启了GPIOA的时钟。
2024-10-23 23:05:28
1063
原创 keil工程创建(STM32F103C8T6为例)
首先查看下载的Keil版本,新的Keil ARM用的是 Compiler version 6,与前面的版本不兼容,要么下载旧版本,要么替换ARM编译器为旧版本的Compiler version 5。可以去ST官网下载官方提供的外设标准库,里面有提供标准的启动文件,然后拷贝必要的启动文件。如果要添加头文件等其他文件的话可以选择文件类型为ALL,默认不用添加,因为后面还要设置,头文件路径才能找到头文件。删除默认的工程文件,新建自己的工程文件为了好与刚刚创建的文件目录相对应。解压之后,把解压的后文件夹放入到。
2024-10-23 21:16:47
2340
原创 排序算法详解
在排序算法中,是一个重要的概念,指的是在排序过程中,如果两个元素的值相等,它们在排序后的相对位置与排序前的相对位置保持不变的特性。
2024-10-14 11:53:11
1172
原创 可变参数列表详解
使用+3是为了确保向上调整到下一个 4 的倍数。使用& ~3是为了清除最低两位,保证结果是 4 的倍数。计算当前大小sizeof(n)计算数据的大小。增加对齐值是为了确保即使当前大小不是 4 的倍数,也能向上调整。位运算创建一个掩码,用于清除低位。将上述两者相与,得到符合 4 字节对齐的值。假设n是一个char类型的参数,其sizeof(n)1 + 4 - 14~(4 - 1)~3(在 32 位系统上)4 & ~34最终结果是 4,这意味着下一个参数的地址将根据 4 字节对齐来计算。
2024-10-13 15:22:40
1132
原创 遗忘linux的root密码,怎么修改?
1.重启Linux系统,在开机界面出现时按进入编辑模式。2.找到以ro开头的字母,删除ro及后面同行的指令,然后在这个位置添加指令然后按就会进入到RAM Disk的环境。是 Linux 系统引导参数,用于在引导过程中挂载根文件系统为可读写模式(read-write),并在加载初始 RAM 磁盘(initramfs)阶段中断引导。这个参数通常用于临时修改系统配置或修复引导问题。rw:表示将根文件系统以可读写(read-write)模式挂载。这允许对根文件系统进行写操作,而不仅仅是只读操作。
2024-09-03 11:05:28
2233
2
原创 c++(更新中~)
/ 定义命名空间// 在命名空间中定义变量、函数、类等int x;// 变量声明// 函数声明// 类声明// 在命名空间外定义函数的实现// 函数实现。
2024-08-29 23:21:33
1559
原创 Linux(更新中~)
在Linux系统中,文件名以点(.)开头通常具有特殊的含义,这种文件通常被称为“隐藏文件”。隐藏文件在Linux系统中不会在普通的文件浏览器中显示,除非用户显式地设置文件浏览器显示隐藏文件。这种设计有助于隐藏系统和配置文件,以及其他用户可能不需要直接操作的文件,从而保持文件系统的整洁性和安全性。:文件管理器默认不显示以点开头的文件,这些文件对于用户来说是隐藏的。:许多以点开头的文件是用来存储应用程序或系统的配置信息,如.bashrc.gitignore等。:有时以点开头的文件用于存储临时数据,例如。
2024-08-29 21:18:18
3627
原创 排序---
排序是对数据、元素或对象按照一定的规则或条件进行排列的操作。排序通常是根据一些特定的标准将项目从小到大或从大到小重新排列。在编程中,根据具体情况选择合适的排序算法是很重要的。每种排序算法都有其优势和局限性,比如在特定情况下可能会有更高的效率。
2024-08-29 14:55:15
1090
原创 二叉树--
二叉树(Binary Tree)是一种树形数据结构,其中每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树常用于实现二叉搜索树、堆等数据结构,具有广泛的应用。
2024-08-26 10:50:48
880
原创 栈和队列-
栈(Stack)是一种常见的数据结构,遵循后进先出(LIFO,Last In First Out)的原则。这意味着最后进入栈的元素将被最先移除。栈可以比喻为一叠盘子,你只能在顶部放置或移除盘子。
2024-08-26 10:09:27
998
原创 Linux常用命令
是一个用于设置用户文件创建权限掩码的命令。在 UNIX 和类 UNIX 操作系统中, 值定义了在创建新文件或目录时要屏蔽的权限位。具体来说, 值会从新创建的文件或目录权限中去除相应位的权限。查看当前的 值: 设置 值: 每一位代表一个权限位,一般来说,第一位控制所有者的权限,第二位控制与所有者同一组的用户的权限,第三位控制其他用户的权限。 umask -S 显示创建的默认权限 若是非执行程序会默认去掉可执行权限 r-可读 ;w-可写;x-可执
2024-08-14 14:49:38
1007
原创 顺序表和链表
线性表是一种常见的数据结构,用于存储一组按照顺序排列的元素。线性表中的元素之间存在一对一的关系,即每个元素都有唯一的前驱和后继元素(除了第一个元素和最后一个元素)。常见的线性表:顺序表、链表、栈、队列、字符串等,线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储。
2024-08-14 10:27:05
299
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅