FreeRTOS
文章平均质量分 84
想当钓鱼佬
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Freertos源码分析:任务创建/删除
FreeRTOS 中任务创建通过或实现。动态创建()会自动分配任务栈和TCB(任务控制块),静态创建()需用户预分配内存。参数校验:检查栈深度、任务函数指针等有效性。内存分配:调用分配TCB和栈空间。TCB初始化:填充任务名、优先级、栈指针等字段。栈初始化:调用模拟中断压栈,构造初始上下文。任务就绪:将任务加入就绪列表,触发调度(若调度已启动)。任务删除流程:任务删除通过实现,支持删除其他任务或自身(传参NULL删除后资源需由空闲任务回收。任务状态检查:若删除自身标记为待删除状态并触发调度;原创 2025-07-17 01:02:14 · 447 阅读 · 0 评论 -
FreeRTOS源码分析:heap
configTOTAL_HEAP_SIZE:定义堆总大小 configAPPLICATION_ALLOCATED_HEAP:允许用户自定义堆位置 configHEAP_CLEAR_MEMORY_ON_FREE:释放时清零内存。最简单的内存分配方案,仅支持pvPortMalloc()不支持vPortFree()。FreeRTOS提供5种堆内存管理方案(heap_1.c至heap_5.c),每种方案针对不同应用场景设计,源码位于。支持内存分配与释放,使用最佳匹配算法但会产生碎片。通过挂起调度器保证原子操作。原创 2025-06-14 22:47:59 · 987 阅读 · 0 评论 -
FreeRTOS链表分析
FreeRTOS中的链表采用双向链表结构,主要用于任务调度、事件管理、队列操作等核心功能。其实现特点是轻量高效,通过指针直接嵌入数据结构中,避免动态内存分配。主要代码位于list.c和list.h文件中。原创 2025-06-14 01:46:00 · 512 阅读 · 0 评论 -
FreeRTOS任务切换,现场保护(M3,M4内核)
删除当前任务时,任务实际在idle函数中被删除,在DeleteTask()函数中实际完成的是链表从ReadyList移除,uxDeletedTasksWaitingCleanUp增加,告诉idle任务,有任务需要删除,idle任务在xTasksWaitingTermination链表中找到要删除的TCB,释放其申请的空间。此图中除了pc,lr,sp,fp之外,r4-r11并不用被保存,所以接下来保存fun1的形参(str r0,[xxxxxx])。),包含任务栈指针、优先级、状态链表项等关键字段。原创 2025-06-13 21:27:09 · 914 阅读 · 0 评论 -
FreeRTOS源码分析:软件定时器-Timer
二.xTimerStart()/xTimerStop()/xTimerStartFromISR()/xTimerStopFromISR()FreeRTOS 的软件定时器是一种基于系统节拍(tick)的机制,允许用户创建和管理定时任务。回调函数在服务任务上下文中运行,需注意:避免阻塞操作(可能影响其他定时器)。通过分析源码可优化定时器使用场景,例如高精度需求需结合硬件定时器。定时器通过链表组织,服务任务按到期时间排序管理。在中断中开启软件定时器定时。在中断中停止软件定时器定时。动态方式创建软件定时器。原创 2025-06-12 23:10:31 · 456 阅读 · 0 评论 -
FreeRTOS软件定时器使用以及例程
FreeRTOS的软件定时器(Software Timer)提供了一种基于系统节拍(Tick)的定时功能,允许创建周期性或单次触发的定时任务。软件定时器由内核调度,通过回调函数实现定时逻辑,适用于低精度定时场景(如秒级或毫秒级)。软件定时器是基于 FreeRTOS 内核提供的时间管理功能实现的,允许开发者创建、启动、停止、删除和管理定时器,从而实现在任务中对时间的灵活控制。软件定时器硬件定时器FreeRTOS提供的功能来模拟定时器,依赖系统的任务调度器来进行计时和任务调度。原创 2025-06-12 16:52:11 · 923 阅读 · 0 评论 -
FreeRTOS源码分析:任务通知-TaskNotify
任务通知是FreeRTOS提供的一种轻量级通信机制,允许任务间直接发送事件或数据。相比队列、信号量等传统IPC机制,任务通知更高效,因为其直接操作任务控制块(TCB)中的通知字段,无需额外数据结构。原创 2025-06-12 00:29:05 · 854 阅读 · 0 评论 -
FreeRTOS任务通知使用以及例程
任务通知是FreeRTOS提供的一种轻量级通信机制,允许任务间直接发送事件或数据,无需创建队列、信号量等中间对象。每个任务拥有独立的通知值(32位)和状态标志,效率高且节省内存。任务通知通常用于替代二值信号量或事件标志组,提供了更轻量级的任务间通信方式。大多数任务间通信方法通过中间对象,如队列、信号量或事件组。发送任务写入通信对象,接收任务从通信对象读取。使用任务通知时,发送任务直接向接收任务发送通知,而无需中间对象。(相当直接发到别人的邮箱里,缺点:只能一对一或者多对一)。原创 2025-06-11 03:08:25 · 1093 阅读 · 0 评论 -
FreeRTOS事件标志组使用以及例程
当在嵌入式系统中运行多个任务时,这些任务可能需要相互通信.允许任务等待多个事件中的任意一个或全部事件发生FreeRTOS中的事件标志组(Event Flags Group)提供了一种轻量级的机制,用于在任务之间传递信息和同步操作,每个事件由二进制标志表示,支持“与”和“或”逻辑触发。如果设置为 1,则事件组内实现的位数(或标志数)为 8;如果设置为 0,则为 24(这个宏另外作用系统时钟节拍计数使用 TickType_t 数据类型定义的。原创 2025-06-09 04:28:41 · 866 阅读 · 0 评论 -
FreeRTOS源码分析:信号量-semaphore
FreeRTOS 中的信号量是一种用于任务间同步或资源管理的机制,分为二进制信号量、计数信号量和互斥信号量(Mutex)。信号量的实现基于队列机制,核心源码位于queue.c和semphr.h中。信号量是队列的一种特殊形式,队列长度为信号量计数最大值。信号量的释放和获取通过队列的发送和接收实现。互斥信号量通过优先级继承解决优先级反转问题。原创 2025-06-08 20:26:44 · 751 阅读 · 0 评论 -
FreeRTOS队列和队列集使用以及例程
freertos队列以及队列集的使用demo原创 2025-06-06 21:31:51 · 387 阅读 · 0 评论 -
FreeRTOS-互斥与同步概念以及demo
freertos,同步与互斥原创 2025-06-04 18:35:23 · 273 阅读 · 0 评论
分享