FREERTOS源码详解笔记

一.框架笔记

1.xTaskCreate()

(1)申请任务堆栈的空间
(2)申请任务控制块的内存
(3)调用prvInitialiseNewTask()初始化任务
(4)调用prvAddNewTaskReadyList()添加新创建任务到就绪列表中

2.prvInitialseNewTask()

(1) 初始化堆栈为0xa5,可选功能
(2) 获取栈顶,保存到pxTopofStack.
(3) 保存任务名字,到pxNewTCB->pcTaskName.
(4) 保存任务优先级到任务控制块
(5) 初始化两个列表项 xStateListItem和xEventListItem
(6) 初始化各种任务控制块成员变量,初始化堆栈,初始化句柄(任务控制块)

3. prvAddNewTaskToReadyList

(1) uxCurrrentNemberOfTasks加一,记录系统中有多少个任务
(2) 如果当前的任务只有一个,则初始化相关列表
(3) 调用prvAddTaskToReadyList,将任务添加到就绪列表中
(4) 如果新创建的任务优先级比当前的任务优先级高,则用taskYIEKD_IFUSING_PREEMPTION()进行任务的调度

4.TaskToreadyList()

(1)将uxTopReadyPriority相应的bit置1,表示相应的优先级有就绪的任务。
(2)将新创建的任务添加到对应的就绪列表中去,末尾插入,比如优先级5,插入到pxReadyList()

5.任务删除 vTaskDelete()

(1) 根据任务句柄获取任务控制块,如果任务句柄为NULL,表示删除任务自身
(2) 将要删除的任务从就绪列表中移除,并购且如果相应的优先级只有这一个那么复位相应的优先级位
(3)如果任务等待某些事件的话,那将此任务从相应的事件列表中移除
(4) uxCurrentNumberOfTask减一,表示当前任务减1
(5) 释放任务堆栈和任务控制块
(6) 如果删除的是自身,最后需要主动发起任务切换

6.任务挂起

xTaskSuspend(TaskHandle_t x TaskToSuspend)
(1) 根据任务句柄获取任务块,如果任务句柄位NULL,表示删除任务自身
(2) 将要挂起的任务从相应的状态列表和事件中移除。
(3) 将要挂起的任务添加到挂起任务列表xSuspendTaskList里面去
(4) 如果挂起的是自身,而且正在运行,则需要进行任务切换

7.任务恢复

void vTaskResume(TaskHandle_t xTaskToResume)
(1) 判断要恢复的任务是否为挂起任务
(2) 将要恢复的任务从挂起任务列表xSuspendTaskList 中移除
(3) 调用函数prvAddTaskToReadyList() 将任务添加到就绪列表中
(4) 如果刚刚恢复的任务优先级比当前运行的任务优先级高,则进行一次任务切换

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeRTOS是一个轻量级的开源实时操作系统,它适用于微处理器和微控制器,可以在多种平台上运行。FreeRTOS源码详解与应用开发涉及到了很多的知识点,需要深入了解和研究,在本文中,我将从以下几个方面来阐述FreeRTOS源码详解与应用开发。 一、FreeRTOS源码结构 FreeRTOS源码结构清晰明了,易于理解。其中,核心部分由5个文件组成,分别为tasks.c,queue.c,list.c,event_groups.c和timers.c。在这些文件中,包含了FreeRTOS的核心代码,是整个系统的基础。此外,FreeRTOS还包含了一些可选的模块,如定时器、跟踪和统计等,这些模块可以根据需要从源代码中选取。 二、FreeRTOS任务管理 FreeRTOS任务管理是其最主要的功能之一,任务的创建、切换、删除等都是通过任务管理来实现的。在FreeRTOS中,任务被抽象成任务控制块(Task Control Block, TCB),每个任务都有一个独一无二的TCB,包含了任务的所有信息,如堆栈、状态、优先级等。FreeRTOS通过TCB来实现任务的切换和管理。 三、FreeRTOS内存管理 FreeRTOS内存管理主要涉及到堆栈和堆的管理。在FreeRTOS中,每个任务都有自己的堆栈,堆栈可以动态扩展,可以根据需要进行调整。此外,FreeRTOS还支持动态分配堆内存,可以通过API函数来分配和释放堆内存。 四、FreeRTOS时间管理 FreeRTOS时间管理主要涉及到定时器、延时和时间戳等功能。FreeRTOS支持多种类型的定时器,并支持定时器链表。延时可以通过vTaskDelay函数来实现,时间戳则可以通过xTaskGetTickCount函数来获取。 五、FreeRTOS中断管理 FreeRTOS中断管理涉及到任务的中断和系统的中断。在FreeRTOS中,任务可以设置自己的中断,也可以响应外部中断。系统的中断则是用来处理定时器中断、网络中断等。中断处理函数必须很快地完成任务,否则可能会对系统性能造成影响。 总之,FreeRTOS源码详解与应用开发是一个广泛而深入的领域,需要我们认真学习和研究。但是,掌握FreeRTOS的核心代码和功能后,我们可以轻松地在嵌入式系统中使用它,从而提高系统的可靠性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值