
STM32 FreeRTOS
文章平均质量分 83
STM32 FreeRTOS 操作系统
雁过留声花欲落
这个作者很懒,什么都没留下…
展开
-
FreeRTOS常见问题
进入Hal_Delay函数,不会进入阻塞状态,操作系统会将Hal_Delay当作一个普通函数,占用CPU。当别的任务优先级高时,别的任务会直接抢占,但是自己的等待时间不会流失,只有自己任务执行时,才会继续流失。其最底层滴答值照样会继续执行,但是它的while循环因为被其他任务抢断,会产生误差。进入临界区函数:taskENTER_CRITICAL();------enter(进入;------exit(出口,通道)只有调用操作系统给的delay函数(VTaskDelay)才会进入延迟阻塞状态。原创 2025-01-14 20:12:13 · 291 阅读 · 0 评论 -
hal库初始创建+EIDE创建项目+FreeRTOS移植
一定要先打开一下open Project(用EIDE前提),然后关闭就行。原创 2025-02-27 15:17:14 · 981 阅读 · 0 评论 -
STM32 FreeRTOS 介绍
裸机开发指的是在没有操作系统(OS)或者其他高级软件支持的情况下,直接在裸机硬件上进行软件开发的过程。在裸机开发中,开发者需要直接面对硬件层面的操作和控制,而不依赖于任何操作系统提供的抽象层或者服务。这就像手动操纵一辆汽车,想开车从城市A到城市B,你需要了解汽车的每个部件,掌握如何驾驶,包括油门、刹车、方向盘等。你需要手动决定何时加速、何时刹车、何时转弯。这就好比裸机编程,开发者需要亲自管理每个硬件资源,编写所有的控制逻辑。我们前面所有的代码都属于裸机开发。原创 2025-01-13 10:41:46 · 1232 阅读 · 0 评论 -
STM32 FreeRTOS 基础知识
恢复时,该任务不会知道处理器寄存器已经被修改过了——如果它使用经修改过的数值,那么求和会得到一个错误的数值。下图展示了与时间相关的三项任务的执行模式。一个处理器核心在某一时刻只能运行一个任务,如果在各个任务之间迅速切换,这样看起来就像多个任务在同时运行。Ø就绪态:准备就绪任务指那些能够执行(它们不处于阻塞或挂起状态),但目前没有执行的任务,因为同等或更高优先级的不同任务已经处于运行状态。如果高优先级任务等待某个资源(延时或等待信号量等)而无法执行,调度器会选择执行其他就绪的高优先级的任务。原创 2025-01-13 11:41:09 · 956 阅读 · 0 评论 -
STM32 FreeRTOS移植
名称描述FreeRTOSFreeRTOS内核FreeRTOS组件,一般我们会选择使用第三方的组件tools工具FreeRTOS的GitHub仓库链接快速入门指南官方文档链接升级到指定FreeRTOS版本官方文档链接FreeRTOS历史更新记录其他其他。原创 2025-01-13 14:49:44 · 1210 阅读 · 0 评论 -
FreeRTOS数据类型
如果 configUSE_16_BIT_TICKS 设置为非零 (true) ,则将 TickType_t 定义为无符号的 16 位类型。如果 configUSE_16_BIT_TICKS 设置为零(假),则将 TickType_t 定义为无符号的 32 位类型。, 从函数名可以得到如下信息:v表示这个函数的返回值是void, Task表示这个函数定义在Task.c文件中, Delay表示函数的功能。通常是 16 位架构上的 16 位类型和 32 位架构上的 32 位类型,但也有例外情况。原创 2025-03-04 20:28:14 · 691 阅读 · 0 评论 -
STM32 FreeRTOS的任务创建和删除
需要注意的是,空闲任务会负责释放被删除任务中由系统分配的内存,但是由用户在任务删除前申请的内存,则需要由用户在任务被删除前提前释放,否则将导致内存泄露。如果删除其他任务,释放内存,任务数量--。该函数用于删除已被创建的任务,被删除的任务将从就绪态任务列表、阻塞态任务列表、挂起态任务列表和事件列表中移除。4、更新下个任务的阻塞时间---更新下一个任务的阻塞超时时间,以防被删除的任务就是下一个阻塞超时的任务。1、获取所要删除任务的控制块---通过传入的任务句柄,判断所需要删除哪个任务,NULL代表删除自身。原创 2025-01-13 18:52:45 · 1109 阅读 · 0 评论 -
STM32 FreeRTOS 任务创建和删除实验(动态方法)
动态创建,堆栈是在FreeRTOS管理的堆内存里,注意任务不要重复创建。uxTaskGetStackHighWaterMark()获取指定任务的任务栈的历史剩余最小值,根据这个结果适当调整启动任务的大小。原创 2025-01-17 19:14:17 · 1624 阅读 · 0 评论 -
STM32 FreeROTS 任务创建和删除实验(静态方法)
函数是通过函数命名---找到tasks.c文件可以找到这个函数。通过函数命名---可以明白这个函数是在timers.c这个文件中。task3:判断按键KEY1是否按下,按下则删掉task1。staticallocation------静态分配。可以自己创建一个软件定时器任务---这里是打开的。直接看代码修改,其余和动态创建和删除一样。可以尝试编译---它会提示需要两个函数。设置定时器的优先级这里是最高优先级。栈空间的大小256个字。原创 2025-01-17 18:24:25 · 632 阅读 · 0 评论 -
STM32 FreeRTOS 的任务挂起与恢复以及查看任务状态
不论任务被使用vTaskSuspend()挂起多少次,只需调用vTaskResume()一次,即可使其继续执行。INCLUDE_vTaskSuspend和INCLUDE_xTaskResumeFromISR必须定义为1。xTaskToSuspend:待挂起任务的任务句柄,为NULL表示挂起任务自身。xTaskResumeFromISR():在中断中恢复被挂起的任务。vTaskSuspend():挂起任务,类似暂停,可恢复。vTaskResume():恢复被挂起的任务。原创 2025-01-14 10:35:26 · 483 阅读 · 0 评论 -
STM32 FreeRTOS 任务挂起和恢复---实验
学会vTaskSuspend()、vTaskResume()任务挂起与恢复相关API函数使用:start_task:用来创建其他的三个任务。task1:实现LED1每500ms闪烁一次。task2:实现LED2每500ms闪烁一次。task3:判断按键按下逻辑,KEY1按下,挂起task1,按下KEY2在任务中恢复task1。原创 2025-01-17 20:14:20 · 615 阅读 · 0 评论 -
STM32 FreeRTOS中断管理
需要注意的是,vPortRaiseBASEPRI函数中,会将configMAX_SYSCALL_INTERRUPT_PRIORITY直接赋值给BASEPRI寄存器,而不会进行移位操作,因此,当我们要让FreeRTOS可以管理的最大优先级设置为5时,要确保configMAX_SYSCALL_INTERRUPT_PRIORITY的bit7-bit4为5,通常赋值为0x50。这里的寄存器不同于STM32的外设寄存器,后者是内存映射寄存器,实际上是在内存中划分特定的地址空间,用于访问和控制外设的功能。原创 2025-01-14 13:46:18 · 1923 阅读 · 0 评论 -
STM32 FreeRTOS消息队列
队列是任务间通信的主要形式。它们可以用于在任务之间以及中断和任务之间发送消息。队列是线程安全的数据结构,任务可以通过队列在彼此之间传递数据。FIFO顺序:队列采用先进先出(FIFO)的顺序,即先发送的消息会被先接收。线程安全:队列操作是原子的,确保在多任务环境中的数据完整性。阻塞和非阻塞操作:任务可以通过阻塞或非阻塞的方式发送和接收消息。如果队列满了或者为空,任务可以选择等待直到有空间或者数据可用,或者立即返回。原创 2025-01-15 08:43:49 · 709 阅读 · 0 评论 -
STM32 FreeRTOS时间片调度---FreeRTOS任务相关API函数---FreeRTOS时间管理
在FreeRTOS中,同等优先级的任务会轮流分享相同的CPU时间,这个时间被称为时间片。在这里,一个时间片的长度等同于SysTick中断的周期。函数描述获取任务优先级设置任务优先级获取系统中任务的数量获取所有任务状态信息获取指定单个的任务信息获取当前任务的任务句柄根据任务名获取该任务的任务句柄获取任务的任务栈历史剩余最小值获取任务状态以“表格”形式获取所有任务的信息获取任务的运行时间延时函数介绍vTaskDelay():相对延时。从执行vTaskDelay()函数开始。原创 2025-01-15 10:40:47 · 416 阅读 · 0 评论 -
STM32 FreeRTOS 信号量
reeRTOS中的信号量是一种用于任务间同步和资源管理的机制。信号量可以是二进制的(只能取0或1)也可以是计数型的(可以是任意正整数)。信号量的基本操作包括“获取”和“释放”。比如动车上的卫生间,一个卫生间同时只能容纳一个人,由指示灯来表示是否有人在使用。当我们想使用卫生间的时候,有如下过程:1、判断卫生间是否有人使用(判断信号量是否有资源)2、卫生间空闲(信号量有资源),那么就可以直接进入卫生间(获取信号量成功)原创 2025-01-15 15:34:20 · 2032 阅读 · 1 评论 -
STM32 FreeRTOS 队列集
队列集简介队列集(QueueSet)是FreeRTOS中的一种数据结构,用于管理多个队列。它提供了一种有效的方式,通过单个API调用来操作和访问一组相关的队列。在多任务系统中,任务之间可能需要共享数据,而这些数据可能存储在不同的队列中。队列集的作用就是为了更方便地管理这些相关队列,使得任务能够轻松地访问和处理多个队列的数据。队列集的特点和用法:集中管理多个队列:队列集允许你将多个相关联的队列组织在一起,方便集中管理。 单一API调用:通过单一的API调用,任务可以同时操原创 2025-01-17 14:11:17 · 192 阅读 · 0 评论 -
STM32 FreeRTOS 事件标志组
当在嵌入式系统中运行多个任务时,这些任务可能需要相互通信,协调其操作。FreeRTOS中的事件标志组(EventFlagsGroup)提供了一种轻量级的机制,用于在任务之间传递信息和同步操作。事件标志组就像是一个共享的标志牌集合,每个标志位都代表一种特定的状态或事件。任务可以等待或设置这些标志位,从而实现任务之间的协同工作。1、事件位(事件标志)事件位用于指示事件是否发生。事件位通常称为事件标志。原创 2025-01-17 14:38:02 · 1000 阅读 · 0 评论 -
STM32 FreeRTOS任务通知
任务通知是FreeRTOS中一种用于任务间通信的机制,它允许一个任务向其他任务发送简单的通知或信号,以实现任务间的同步和协作。任务通知通常用于替代二值信号量或事件标志组,提供了更轻量级的任务间通信方式。大多数任务间通信方法通过中间对象,如队列、信号量或事件组。发送任务写入通信对象,接收任务从通信对象读取。当使用直接任务通知时,顾名思义,发送任务直接向接收任务发送通知,而无需中间对象。通过中间对象进行通信无需中间对象进行通信每个RTOS任务都有一个任务通知组。原创 2025-01-17 17:25:18 · 539 阅读 · 0 评论 -
STM32 FreeRTOS软件定时器
FreeRTOS中的软件定时器是一种轻量级的时间管理工具,用于在任务中创建和管理定时器。软件定时器是基于FreeRTOS内核提供的时间管理功能实现的,允许开发者创建、启动、停止、删除和管理定时器,从而实现在任务中对时间的灵活控制。软件定时器硬件定时器FreeRTOS提供的功能来模拟定时器,依赖系统的任务调度器来进行计时和任务调度由芯片或微控制器提供,独立于CPU,可以在后台运行,不受任务调度器的影响精度和分辨率可能受到任务调度的影响具有更高的精度和分辨率。原创 2025-01-18 10:43:37 · 799 阅读 · 0 评论 -
STM32 FreeROTS Tickless低功耗模式
FreeRTOS的Tickless模式是一种特殊的运行模式,用于最小化系统的时钟中断频率,以降低功耗。在Tickless模式下,系统只在有需要时才会启动时钟中断,而在无任务要运行时则完全进入休眠状态,从而降低功耗。在滴答中断重启时,会对RTOS滴答计数值进行校正调整。Tickless模式的实现方式通常依赖于微控制器的硬件特性,尤其是低功耗定时器或实时时钟单元。以下是Tickless模式的一般工作原理:1、空闲任务。原创 2025-01-18 14:36:18 · 721 阅读 · 0 评论 -
STM32 FreeRTOS内存管理简介
函数描述Malloc申请内存Free释放内存获取当前空闲内存的大小。原创 2025-01-18 16:22:59 · 1170 阅读 · 0 评论