
freertos学习笔记
文章平均质量分 91
不咸不要钱
逝者如斯夫,不舍昼夜
展开
-
FreeRtos学习笔记(12)systemView 分析任务调度情况
使用stm32f429 + freertosV10.5.1 + systemView 3.5 + keil AC5。使用systemview 追踪观察freertos之间任务切换细节原创 2024-03-25 19:38:27 · 1526 阅读 · 0 评论 -
FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析
FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析怎么查找就绪任务中优先级最高的?tasks.c中声明了一个全局变量 uxTopReadyPriority,任务从其他状态进入就绪态时,需要修改 uxTopReadyPriority,将就绪任务优先级信息保存在 uxTopReadyPriority 中。在FreeRtos进行剪裁时,如果最大任务优先级 configMAX_PRIORITIES 不超过32,则任务就绪时会将 uxTopReadyPriority 中任务优先级对应的位置一(原创 2021-11-02 21:04:29 · 8918 阅读 · 1 评论 -
FreeRtos学习笔记(10)任务切换原理刨析
FreeRtos学习笔记(10)任务切换原理刨析STM32 单片机启动流程中介绍了SP和PC寄存器,STM32单片机bootloader扫盲中说过如何通过控制SP和PC寄存器从而控制程序从bootLoader跳转到APP,RTOS任务切换和BootLoader与APP之间的跳转类似,也是通过控制SP和PC指针实现任务之间跳转。MSP和PSP在中断服务函数使用MSP作为堆栈指针,如果工程中没有特殊设置(即非RTOS工程)整个工程都会默认使用MSP。如果工程使用了RTOS,则除了中断服务函数外,其他任原创 2021-10-28 20:35:03 · 7447 阅读 · 0 评论 -
freeRtos学习笔记 (9) 移植和CPU利用率统计
freeRtos学习笔记 (9) 移植和CPU利用率统计使用官方固件移植首先准备一个能跑的裸机工程下载freeRtos固件下载地址 https://freertos.org/a00104.htmlGitHub地址 https://github.com/FreeRTOS/FreeRTOS将freeRtos添加进工程CPU利用率使用MDK中间件移植首先准备一个能跑的裸机工程安装MDK中间件CPU利用率...原创 2021-06-19 00:40:17 · 15039 阅读 · 0 评论 -
freeRtos学习笔记 (8) 任务通知
freeRtos学习笔记freeRtos任务通知任务通知的优缺点freeRtos任务控制块中包含两个32位的变量,用于任务通知,在一些情况下,任务通知可以替代信号量和事件组,并且比信号量和事件组效率更高。如果不使用任务通知,则可以关闭configUSE_TASK_NOTIFICATIONS宏 在创建任务时,每个任务就可以少8个字节的RAM。任务通知存放在任务控制块中,因此在本任务中接收本任务控制块中的任务通知。只有等待通知的任务才能被堵塞,发送通知的任务不会因为发送失败进入堵塞状态。发原创 2021-02-24 20:35:33 · 1577 阅读 · 0 评论 -
freeRtos学习笔记 (7)信号量
freeRtos学习笔记freeRtos信号量优先级翻转信号量分为四种:二值信号量,互斥信号量,计数信号量和递归互斥信号量,其中计数信号量用于管理系统多个共享资源,用计数值表示可用资源数目;二值信号量是一种特殊的计数信号量,和事件组类似,相当于裸机中的标志位,常用于任务之间的同步;互斥信号量和二值信号量类似,相比二值信号量避免了任务优先级翻转问题,因此常用来保护临界资源,但是互斥信号量不可以在中断中使用,只能在任务中使用;递归互斥信号量是一种特殊的互斥信号量,如果任务获取到递归互斥信号量后,该任务中原创 2021-02-22 20:08:59 · 1872 阅读 · 0 评论 -
freeRtos学习笔记 (6)软件定时器
freeRtos学习笔记freeRtos软件定时器软件定时器需要注意事项软件定时器的精度基于时钟节拍,例如系统时钟节拍为10ms, 软件定时器定时时间必须是10ms的整数倍,因此软件定时器一般用于对时间精度要求不高的地方。软件定时器底层也是一个任务,只不过这个任务是freertos自己创建的,和空闲任务类似,因此软件定时器回调函数会被打断,在使用时注意配置好软件定时器任务的优先级,最好优先级高一点。软件定时器可以创建多个,但是会消耗RAM资源,需要配置好对应的堆栈空间。软件定时器创建T原创 2021-02-21 10:15:48 · 1620 阅读 · 0 评论 -
freeRtos学习笔记 (5)事件组
freeRtos学习笔记freeRtos事件组为什么要用事件组?多任务环境下, 任务、中断之间往往需要同步操作,一个事件发生会告知等待中的任务,即形成一个任务与任务、中断与任务间的同步。事件可以提供一对多、多对多的同步操作。一对多同步模型:一个任务等待多个事件的触发,这种情况是比较常见的;多对多同步模型:多个任务等待多个事件的触发。为什么不直接使用全局变量?在裸机编程时,使用全局变量的确比较方便,但是在加上 RTOS 后就是另一种情况了。 使用全局变量相比事件标志组主要有如下三个问题原创 2021-02-06 11:17:04 · 1765 阅读 · 1 评论 -
freeRtos学习笔(4)消息队列
freeRtos学习笔记freeRtos消息队列为什么要用消息队列消息队列可以在任务与任务间,中断与任务间传递信息。为什么不用全局数组?全局数组也可以传递信息,但是和消息队列相比,消息队列有一下优势:全局数组需要解决多任务访问冲突,需要加临界区保护消息队列可以实现超时机制消息队列可以实现FIFO和LIFO机制消息队列创建QueueHandle_t xQueueCreate(UBaseType_t uxQueueLength, /* 消息个数 */原创 2021-01-12 21:56:03 · 2350 阅读 · 0 评论 -
freeRtos学习笔(3)临界区管理
freeRtos学习笔记freeRtos临界区管理freeRtos临界区代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断。为确保临界段代码的执行不被中断,在进入临界段之前须关中断,而临界段代码执行完毕后,要立即开中断。FreeRTOS 的源码中有多处临界段的地方, 临界段虽然保护了关键代码的执行不被打断, 但也会影响系统的实时性。比如此时某个任务正在调用系统 API 函数,而且此时中断正好关闭了,也就是进入到了临界区中,这个时候如果有一个紧急的中断事件被触发,这个中断原创 2020-12-24 18:18:07 · 2433 阅读 · 1 评论 -
freeRtos学习笔(2)任务管理
freeRtos学习笔记freeRtos任务管理freeRtos任务状态freeRtos中任务有四种状态:就绪态、运行态、杜塞态、挂起态。图 16-1(1): 创建任务→就绪态(Ready):任务创建完成后进入就绪态,表明任务已准备就绪,随时可以运行,只等待调度器进行调度。图 16-1(2): 就绪态→运行态(Running):发生任务切换时,就绪列表中最高优先级的任务被执行,从而进入运行态。图 16-1(3): 运行态→就绪态:有更高优先级任务创建或者恢复后,会发生任务调度,此刻就绪列表中原创 2020-12-17 18:25:26 · 1775 阅读 · 0 评论 -
freeRtos学习笔(1)内核剪裁
freeRtos学习笔记freeRtos内核剪裁#define configCPU_CLOCK_HZ系统主频#define configTICK_RATE_HZ时钟节拍#define configTOTAL_HEAP_SIZE系统堆栈大小#define configMINIMAL_STACK_SIZE空闲任务堆栈大小#define configSUPPORT_DYNAMIC_ALLOCATION是否使用动态内存分配API#define configSUPPORT_原创 2020-11-25 15:09:44 · 2290 阅读 · 0 评论