#define portSTACK_TYPE   uint32_t
#define portBASE_TYPE   long
typedef portSTACK_TYPE StackType_t;
typedef long BaseType_t;
typedef unsigned long UBaseType_t;
typedef BaseType_t (*TaskHookFunction_t)( void * );
/** 任务控制块。 任务控制块(TCB)为每个任务分配,并存储任务状态信息,包括指向任务上下文的指针(任务的运行时环境,包括寄存器值)*/
typedef struct tskTaskControlBlock
{volatile StackType_t   *pxTopOfStack;  /*< 指向放置在任务堆栈上的最后一项的位置。它必须是TCB结构的第一个成员。 */#if ( portUSING_MPU_WRAPPERS == 1 )xMPU_SETTINGS xMPUSettings;       /*< MPU设置被定义为端口层的一部分。它必须是TCB结构的第二个成员。 */#endifListItem_t         xStateListItem;     /*< 任务的状态列表项所引用的列表表示该任务的状态(就绪、阻塞、挂起)。 */ListItem_t           xEventListItem;     /*< 用于从事件列表中引用任务。 */UBaseType_t          uxPriority;         /*< 任务的优先级。0是最低优先级。 */StackType_t            *pxStack;           /*< 指向堆栈的开始。 */char              pcTaskName[ configMAX_TASK_NAME_LEN ];/*< 创建时给任务的描述性名称。便于调试。不合格的字符类型只允许用于字符串和单个字符。 */#if ( portSTACK_GROWTH > 0 )StackType_t      *pxEndOfStack;      /*< 在架构上指向堆栈的末端,在这种架构中,堆栈是从低内存增长起来的。 */#endif#if ( portCRITICAL_NESTING_IN_TCB == 1 )UBaseType_t     uxCriticalNesting;  /*< 对于未在端口层中保持其计数的端口,保留关键部分的嵌套深度。 */#endif#if ( configUSE_TRACE_FACILITY == 1 )UBaseType_t      uxTCBNumber;        /*< 存储一个数字,该数字在每次创建TCB时递增。 它允许调试器确定何时删除任务然后重新创建任务。 */UBaseType_t      uxTaskNumber;       /*< 存储专门供第三方跟踪代码使用的数字。 */#endif#if ( configUSE_MUTEXES == 1 )UBaseType_t       uxBasePriority;     /*< 最后分配给任务的优先级-由优先级继承机制使用。*/UBaseType_t     uxMutexesHeld;      /*< 任务获取到的互斥信号量个数 */#endif#if ( configUSE_APPLICATION_TASK_TAG == 1 )TaskHookFunction_t pxTaskTag;#endif#if( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 )  /*< 与本地存储有关 */void *pvThreadLocalStoragePointers[ configNUM_THREAD_LOCAL_STORAGE_POINTERS ];#endif#if( configGENERATE_RUN_TIME_STATS == 1 )uint32_t        ulRunTimeCounter;   /*< 存储任务在“运行”状态下所花费的时间。 */#endif#if ( configUSE_NEWLIB_REENTRANT == 1 )/*  分配一个特定于此任务的Newlib reent结构。注意,对新lib的支持已经被包括在大众的要求之中,但不是由FreeRTOS维护人员自己使用。FreeRTOS不是负责生成的newlib操作。用户必须熟悉newlib和必须提供的全系统实现的必要存根。请注意(在撰写本文时)当前的newlib设计实现一个系统范围的malloc(),必须提供锁。 */struct   _reent xNewLib_reent;#endif#if( configUSE_TASK_NOTIFICATIONS == 1 )volatile uint32_t ulNotifiedValue; /*< 任务通知值  */volatile uint8_t ucNotifyState;     /*< 任务通知状态  */#endif/* 请参阅上面tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE定义的注释。 */#if( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 )uint8_t  ucStaticallyAllocated;      /*< 如果任务是静态分配的,则设置为pdTRUE,以确保没有尝试释放内存。如果是动态创建就设置为pdFALSE*/#endif#if( INCLUDE_xTaskAbortDelay == 1 )uint8_t ucDelayAborted;#endif} tskTCB;/* 新版本的任务控制块重命名为TCB_t,但本质上还是tskTCB,主要为了兼容旧版本的应用。 */
typedef tskTCB TCB_t;/** 列表可以包含的唯一对象类型的定义。 列表项定义*/
struct xLIST_ITEM
{listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE          /*< 如果configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES设置为1,则设置为已知值。0x5a5a5a5aUL */configLIST_VOLATILE TickType_t xItemValue;         /*< 列表项的值。 在大多数情况下,它用于按降序对列表进行排序。 */struct xLIST_ITEM * configLIST_VOLATILE pxNext;       /*< 指向列表中下一个ListItem_t的指针。*/struct xLIST_ITEM * configLIST_VOLATILE pxPrevious;  /*< 指向列表中前一个ListItem_t的指针。 */void * pvOwner;                                     /*< 指向包含列表项的对象(通常是TCB)的指针。因此,在包含列表项的对象和列表项本身之间存在双向链接。*/void * configLIST_VOLATILE pvContainer;                /*< 指向该列表项所在列表的指针(如果有的话)。 */listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE           /*< 如果configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES设置为1,则设置为已知值。0x5a5a5a5aUL */
};
typedef struct xLIST_ITEM ListItem_t;                   /* 由于某种原因,lint希望将此作为两个单独的定义。*//** 调度程序使用的队列类型的定义。列表*/
typedef struct xLIST
{listFIRST_LIST_INTEGRITY_CHECK_VALUE               /*< 如果configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES设置为1,则设置为已知值。0x5a5a5a5aUL */configLIST_VOLATILE UBaseType_t uxNumberOfItems;   /*< 列表项的数量 */ListItem_t * configLIST_VOLATILE pxIndex;           /*< 记录列表项索引号,用来遍历列表。指向调用listGET_OWNER_OF_NEXT_ENTRY()返回的最后一个项。*/MiniListItem_t xListEnd;                         /*< 包含最大可能项值的列表项,这意味着它始终位于列表的末尾,因此用作标记。*/listSECOND_LIST_INTEGRITY_CHECK_VALUE             /*< 如果configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES设置为1,则设置为已知值。0x5a5a5a5aUL */
} List_t;
/** 迷你列表项*/
struct xMINI_LIST_ITEM
{listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE          /*< 如果configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES设置为1,则设置为已知值。0x5a5a5a5aUL */configLIST_VOLATILE TickType_t xItemValue;         /*< 列表项值   */struct xLIST_ITEM * configLIST_VOLATILE pxNext;     /*< 指向下一个列表项  */struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; /*< 指向前一个列表项  */
};
typedef struct xMINI_LIST_ITEM MiniListItem_t;

FreeRTOS学习笔记---任务控制块源码分析相关推荐

  1. sheng的学习笔记-Vector源码分析

    概述 Vector底层也是数组,跟ArrayList很像(先看下ArrayList,再看Vector会很轻松),ArrayList可参考下文,并且由于效率低,已经被淘汰了,大概瞅瞅得了 sheng的学 ...

  2. 循环神经网络(RNN, Recurrent Neural Networks)学习笔记:源码分析(一)

    前面帖子给出了RNN的基础理论,里面也提到了神牛Mikolov,这个帖子就基于此牛开源出的一个语言建模工具箱(RNN Language Modeling Tookit)进行代码走读,会加速理解RNN算 ...

  3. c++imread 函数_OpenCV学习笔记与源码分析: imread( )函数

    引言 imread()函数在opencv使用比较. imread()函数 声明: Mat imread(const string& filename, int flags); 这很标准的写法, ...

  4. TensorFlow学习笔记之源码分析(3)---- retrain.py

    https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/image_retraining/retrain.py ...

  5. TensorFlow学习笔记之源码分析(3)---- retrain.py(转)

    原文地址:http://blog.csdn.net/daydayup_668819/article/details/68060483 https://github.com/tensorflow/ten ...

  6. TensorFlow学习笔记之五——源码分析之最近算法

    [python] view plaincopy import numpy as np import tensorflow as tf # Import MINST data import input_ ...

  7. Java设计模式学习以及底层源码分析

    源码在分支master 工厂模式 把具体创建产品的细节封装起来,你要什么产品,我给你什么产品即可. 简单工厂模式 工厂方法模式 缓存层:抽象类 抽象工厂模式 缓存层是:接口 原型模式 问题: 原型模式 ...

  8. Licode入门学习:MediaStream源码分析(二)

    Licode服务与启动过程分析 MediaStream源码分析(一) MediaStream源码分析(二) MediaStream源码分析(三) WebRtcConnection源码分析(一) Web ...

  9. Licode入门学习:MediaStream源码分析(三)

    Licode服务与启动过程分析 MediaStream源码分析(一) MediaStream源码分析(二) MediaStream源码分析(三) WebRtcConnection源码分析(一) Web ...

最新文章

  1. mysql网页后台_jsp+servlet+mysql开发java web旅游网站,有后台管理系统
  2. 一作解读Gut:人体最初的微生物起源与生殖健康
  3. 提升深度学习模型性能及网络调参
  4. C语言对p1口取反,单片机c语言编程基础(5页)-原创力文档
  5. scrapy使用cookie的三种方式
  6. 什么是路由器交换机?路由器交换机介绍!
  7. ABP理论学习之Web API控制器(新增)
  8. java daemon线程的作用_JAVA DAEMON线程的理解
  9. 宇宙无敌大招呼 (5 分)
  10. Python3基础——字典、其他常用操作
  11. vant实现三级联动
  12. 摩托罗拉被曝裁员超一半 联想多品牌失败了吗?
  13. grub4dos引导Linux失败,Grub4dos引导Ubuntu
  14. RTX客户端插件开发 for Delphi XE6 (二)
  15. 鸿蒙系统1004无标题,华为P50 Pro外观基本确认:居中开孔全面屏首发鸿蒙操作系统...
  16. 线下WINDOWS主机挂载华为云存储
  17. 软件包pdftex.def错误:找不到文件`./filename-eps-converted-to.pdf‘
  18. javascript:用js实现tirm函数
  19. 关于PHP工程师职业资格证书的了解
  20. Android6.0 Sensor架构和问题分析

热门文章

  1. ofbiz 分开默认数据库
  2. YAML_15 include and roles
  3. loadrunner12 + ie11 无internet, 代码中文乱码
  4. python中闭包详解
  5. MariaDB:在Linux下修改编码
  6. 我的Google Analytics(分析)正式通知升级到新版本
  7. Java——类和对象
  8. selenium 定位方式2
  9. python numpy库安装winerror5_求问安装numpy+mkl报错FileNotFoundError: [Errno 2] No such fi
  10. 数独游戏技巧从入门到精通_工程施工图识图方法和技巧,使你从建筑施工入门到精通!...