FreeRTOS
文章平均质量分 96
Sense_long
这个作者很懒,什么都没留下…
展开
-
FreeRTOS任务调度(任务上下文切换)详解
在文章中对实时操作系统RTOS进行了移植。移植完成后由于PendSV_Handler、SVC_Handler、SysTick_Handler三个中断的影响使程序进入了硬件错误中断,。原创 2024-04-18 16:52:38 · 2926 阅读 · 2 评论 -
手把手教你FreeRTOS源码详解(四)——信号量、互斥量、递归互斥量
信号量又分为二进制信号量和计数型信号量,二进制信号量相当于一个长度为一的队列,其消息数取值只能为0,1;计数型信号量创建时可以设置其队列长度与队列中的初始消息数,即其消息数的取值没有限制原创 2023-01-01 22:25:26 · 2533 阅读 · 0 评论 -
手把手教你FreeRTOS源码详解(三)——队列
当xNewQueue为pdFALSE时,该队列已经初始化过了,只需要进行复位,队列复位后为空,出队阻塞的任务仍然保存阻塞状态,但入队阻塞的任务不再阻塞,应该从对应的列表中删除。如果采用覆写入队,直接将队列消息数目减1,在任务结尾会重新将队列消息数目加1,这样队列中的消息数目会一直为0,队列不会进行阻塞,在下一次入队时会直接将前面的数据进行覆盖。首先初始化队列存储区的起始地址,若队列长度为0(队列没有存储区),则指向队列的起始地址,若队列长度不为0,指向队列存储区的起始地址。原创 2022-12-27 21:41:12 · 3495 阅读 · 1 评论 -
手把手教你FreeRTOS源码详解(二)——任务管理
vTaskDelay函数的本质是调用prvAddCurrentTaskToDelayedList,将任务添加至对应的延时、阻塞链表,同样,首先将任务从就绪列表中移除,移除后并所移除的就绪列表中是否还有其余就绪的任务,若剩余就绪任务数为0,则清除该列表的就绪标志位。如果阻塞时间不为最大时,首先计算出唤醒任务的时间,xConstTickCount为执行任务prvAddCurrentTaskToDelayedList的时间,xTicksToWait为延时时间,xTimeToWake为唤醒时间。原创 2022-12-22 16:47:18 · 4015 阅读 · 3 评论 -
手把手教你FreeRTOS源码解析(一)——内存管理
FreeRTOS中一共有5种内存分配的方法,分别在文件heap_1.c,heap_2.c,heap_3.c,heap_4.c,heap_5.c种。虽然标准C库中的 malloc()和 free()也可以实现动态内存管理,但是它有以下缺陷:1、在小型嵌入式系统种效率不高。2、线程不安全。3、具有不确定性,每次执行的时间不同。4、会导致内存碎片。原创 2022-12-11 18:19:45 · 7155 阅读 · 1 评论