FreeRTOS学习笔记---任务控制块源码分析
#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学习笔记---任务控制块源码分析相关推荐
- sheng的学习笔记-Vector源码分析
概述 Vector底层也是数组,跟ArrayList很像(先看下ArrayList,再看Vector会很轻松),ArrayList可参考下文,并且由于效率低,已经被淘汰了,大概瞅瞅得了 sheng的学 ...
- 循环神经网络(RNN, Recurrent Neural Networks)学习笔记:源码分析(一)
前面帖子给出了RNN的基础理论,里面也提到了神牛Mikolov,这个帖子就基于此牛开源出的一个语言建模工具箱(RNN Language Modeling Tookit)进行代码走读,会加速理解RNN算 ...
- c++imread 函数_OpenCV学习笔记与源码分析: imread( )函数
引言 imread()函数在opencv使用比较. imread()函数 声明: Mat imread(const string& filename, int flags); 这很标准的写法, ...
- TensorFlow学习笔记之源码分析(3)---- retrain.py
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/image_retraining/retrain.py ...
- TensorFlow学习笔记之源码分析(3)---- retrain.py(转)
原文地址:http://blog.csdn.net/daydayup_668819/article/details/68060483 https://github.com/tensorflow/ten ...
- TensorFlow学习笔记之五——源码分析之最近算法
[python] view plaincopy import numpy as np import tensorflow as tf # Import MINST data import input_ ...
- Java设计模式学习以及底层源码分析
源码在分支master 工厂模式 把具体创建产品的细节封装起来,你要什么产品,我给你什么产品即可. 简单工厂模式 工厂方法模式 缓存层:抽象类 抽象工厂模式 缓存层是:接口 原型模式 问题: 原型模式 ...
- Licode入门学习:MediaStream源码分析(二)
Licode服务与启动过程分析 MediaStream源码分析(一) MediaStream源码分析(二) MediaStream源码分析(三) WebRtcConnection源码分析(一) Web ...
- Licode入门学习:MediaStream源码分析(三)
Licode服务与启动过程分析 MediaStream源码分析(一) MediaStream源码分析(二) MediaStream源码分析(三) WebRtcConnection源码分析(一) Web ...
最新文章
- mysql网页后台_jsp+servlet+mysql开发java web旅游网站,有后台管理系统
- 一作解读Gut:人体最初的微生物起源与生殖健康
- 提升深度学习模型性能及网络调参
- C语言对p1口取反,单片机c语言编程基础(5页)-原创力文档
- scrapy使用cookie的三种方式
- 什么是路由器交换机?路由器交换机介绍!
- ABP理论学习之Web API控制器(新增)
- java daemon线程的作用_JAVA DAEMON线程的理解
- 宇宙无敌大招呼 (5 分)
- Python3基础——字典、其他常用操作
- vant实现三级联动
- 摩托罗拉被曝裁员超一半 联想多品牌失败了吗?
- grub4dos引导Linux失败,Grub4dos引导Ubuntu
- RTX客户端插件开发 for Delphi XE6 (二)
- 鸿蒙系统1004无标题,华为P50 Pro外观基本确认:居中开孔全面屏首发鸿蒙操作系统...
- 线下WINDOWS主机挂载华为云存储
- 软件包pdftex.def错误:找不到文件`./filename-eps-converted-to.pdf‘
- javascript:用js实现tirm函数
- 关于PHP工程师职业资格证书的了解
- Android6.0 Sensor架构和问题分析
热门文章
- ofbiz 分开默认数据库
- YAML_15 include and roles
- loadrunner12 + ie11 无internet, 代码中文乱码
- python中闭包详解
- MariaDB:在Linux下修改编码
- 我的Google Analytics(分析)正式通知升级到新版本
- Java——类和对象
- selenium 定位方式2
- python numpy库安装winerror5_求问安装numpy+mkl报错FileNotFoundError: [Errno 2] No such fi
- 数独游戏技巧从入门到精通_工程施工图识图方法和技巧,使你从建筑施工入门到精通!...