FreeRTOS 任务调度 List 组织

@(嵌入式)

Freertos
FreeRtos

简述

前面了解了 FreeRTOS 的内存管理,接下来看看任务调度,这也是一个操作系统中最重要的一部分,而其任务调度大量使用了链表(list.c 实现),调度器使用链表跟踪不同状态下的任务(就绪、挂起、延时的任务,都会被挂接到各自的链表中),所以这里用一定篇幅介绍下主要供调度使用的链表文件是如何组织的。

我目前使用的源码版本是 v9.0.0

数据结构

FreeRTOS 链表中主要的数据结构是链表(xLIST)和链表项(xLIST_ITEM),以及一个低配的链表项(xMINI_LIST_ITEM)包含于链表中,具体定义和作用下面介绍。定义内容在 Source/include/list.h

xLIST_ITEM

链表项就是链表每个节点的数据结构,其每个成员的具体作用如注释所示。

其中开头和结尾两个宏的作用是检查数据是否完整,当设置 Source/include/projdefs.h configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES 为1的时候,以下结构体会在开始和结尾添加两个变量存储 Magic number(0x5a5a…)供校验。
(后面说明假设没有开启校验)

struct xLIST_ITEM
{
    listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE
    // 保存如任务优先级(任务切换)、阻塞时间(延时挂起时)等信息
    // 供列表排序用,递减
    configLIST_VOLATILE TickType_t xItemValue;
    // 指向下一个节点
    struct xLIST_ITEM * configLIST_VOLATILE pxNext;
    // 指向上一个节点
    struct xLIST_ITEM * configLIST_VOLATILE pxPrevious;
    // 指向对象,主要是 TCB
    void * pvOwner; 
    // 指向所属链表 xLIST
    void * configLIST_VOLATILE pvContainer;         
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值