FreeRTOS空闲任务与低功耗
FreeRTOS 低功耗这块,最容易混在一起的是三个东西:HAL 的基础时钟、FreeRTOS 的 Tick、CPU 进入低功耗的时机。原笔记里提到 SysTick、TIM6、空闲钩子和 Tickless,本质上都围绕这几个问题。 一、HAL 时基和 __weakSTM32 HAL 里很多函数依赖一个毫秒级时基,最典型的是 HAL_Delay() 和 HAL_GetTick()。HAL 默认通常使用 SysTick 作为时基,每 1ms 进入一次 SysTick 中断,在中断里增加 HAL 的 tick 计数。 HAL 里有不少函数使用 __weak 修饰。弱函数的意思是:库里提供一个默认实现,用户如果在自己的工程里写了同名强定义函数,就可以覆盖这个默认实现。HAL 时基相关函数就是典型例子。 比如 HAL 默认会有类似这样的弱函数: 1234__weak void HAL_IncTick(void){ uwTick += uwTickFreq;} 用户可以通过 CubeMX 或手动代码,把 HAL 的时基从 SysTick 改成 TIM6、TIM7 等...
FreeRTOS软件定时器
FreeRTOS 软件定时器适合对精度要求不高、但又需要周期触发或延时触发的场景。它不是硬件定时器,不会占用某个 TIM 外设,也不会在硬件中断里直接执行回调。软件定时器依赖 FreeRTOS 的 Tick 和一个专门的定时器服务任务。 如果要做 PWM、输入捕获、精确采样这类强实时功能,还是应该用硬件定时器。如果只是 500ms 翻转一次 LED、3s 后超时处理、周期性检查状态,用软件定时器更方便。 一、软件定时器的运行机制软件定时器启用后,FreeRTOS 内核会创建两个核心对象: 定时器服务任务:也叫 Timer Service Task 或 Daemon Task。它本身也是一个普通 FreeRTOS 任务,由调度器调度运行。 定时器命令队列:任务或 ISR 调用 xTimerStart()、xTimerStop()、xTimerReset() 等函数时,并不是直接操作定时器链表,而是把命令发送到这个队列里,由定时器服务任务取出后执行。 因此,软件定时器的操作路径大致是: 12345用户任务/ISR 调用 xTimerStart() -> 命...
FreeRTOS任务调度
FreeRTOS 里的任务,就像是一个不会随便返回的 C 函数。基本形式如下: 12345678void TaskA(void *argument){ for (;;) { /* 做自己的事 */ vTaskDelay(pdMS_TO_TICKS(10)); }} 任务函数可以写得像普通函数,但不能像普通函数那样执行完以后直接 return。任务是被调度器管理的执行单元,函数返回后,任务栈和任务控制块仍然在内核的管理范围里,结果不可控。结束任务通常有两种方式:任务自己在退出前调用 vTaskDelete(NULL),或者另一个任务拿到它的句柄后调用 vTaskDelete(taskHandle)。 vTaskDelete() 只是把任务从调度器的各种链表里移除,让它不再参与调度。动态创建任务占用的 TCB 和栈内存,一般由空闲任务后续回收。因此空闲任务需要有运行机会。如果系统里一直有高优先级任务死循环运行,不阻塞、不让出 CPU,被删除任务的内存就可能迟迟无法回收。 一、任务状态FreeRTOS...
FreeRTOS进程通信与消息队列
这篇标题里写的是“进程通信”,在 FreeRTOS 里更准确地说是任务间通信。任务之间不能只靠全局变量硬传数据,否则很容易出现读写时序问题。FreeRTOS 提供的队列、信号量、互斥量、事件组、任务通知、流缓冲区和消息缓冲区,本质上都是为了解决两个问题:数据怎么传过去,任务什么时候被唤醒。 比如 ADC 中断把采样数据写入缓冲区,缓冲区满后通知数据处理任务。中断里不做滤波和显示,只发一个“数据好了”的信号;任务原本阻塞等待,收到信号后进入就绪态,等调度器选中后再处理数据。这个模式比任务一直轮询标志位可靠,也更省 CPU。 一、通信方式怎么选这些通信机制不是互相替代的关系,重点是先判断传递的是数据、事件、资源所有权,还是一段字节流。 队列:传递固定大小的数据项。适合按键事件、命令结构体、传感器采样包等。 二值信号量:传递一个“事件发生”的信号。适合 ISR 通知任务、任务之间同步。 计数信号量:表示多个同类资源或者累计发生次数。适合资源池、多个缓冲块、生产者累计通知。 互斥量:保护共享资源,解决多个任务访问同一个外设或数据结构的问题。适合串口打印、LCD 刷屏、文件系统访问...
一阶倒立摆建模仿真实验
倒立摆建模仿真实验好叭,这是篇课程作业,哈哈哈哈哈水一篇。 一、研究背景倒立摆是控制理论、机器人学和自动化领域中的一个经典研究模型。倒立摆的动力学原理与双足机器人、平衡车、无人机,以及火箭发射时的姿态控制、导弹制导等平衡控制场景高度相关。研究倒立摆有助于解决这类系统的实时稳定控制问题。 二、问题描述关于倒立摆的问题描述如下: 本例中取小车质量 $M=2kg$,摆杆质量 $m=0.1kg$。后面建模里 $l$ 按“转动支点到摆杆质心的距离”理解,并代入 $l=0.5m$。现需控制小车的作用力 $F$,使得摆杆保持竖直状态。 三、数学建模对于图中模型,现做以下标注: 牛顿欧拉方法从传统的力和角度的分析,根据牛顿第二定律可写出摆杆在水平方向和竖直方向的力平衡方程: \begin{cases} m\frac{\mathrm{d}^{2}}{\mathrm{d} t^{2}}(y + l\sin\theta) = H \\ m\frac{\mathrm{d}^{2}}{\mathrm{d} t^{2}}(l\cos\theta) = V - mg \end{cases}根据摆杆质心...







