你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
FreeRTOS源代码分析(tskTaskControlBlock)
[复制链接]
阿松松
发布时间:2015-1-13 14:58
文章
文章封面:
-
文章简介:
-
本帖最后由 阿松松 于 2015-1-13 15:49 编辑
task.c中,关于TCB。
/*每个任务创建的时候都会分配TCB(任务控制块)。
TCB存储着任务状态信息,包括指向任务的上下文(
任务的运行时刻的环境,包括寄存器的值)的指针。 */
typedef struct tskTaskControlBlock
{
/*指向任务堆栈中最后一次存入的item,这个item必须是TCB结构体的第一个成员。*/
volatile portSTACK_TYPE *pxTopOfStack;
/*MPU设置被作为port layer(个人理解为平台层)的一部分。这个变量必须是TCB结构体的第二个成员。*/
#if ( portUSING_MPU_WRAPPERS == 1 )
xMPU_SETTINGS xMPUSettings;
#endif
/*任务的状态链表结点参考,指示任务的状态(Ready,Blocked,Suspended)*/
xListItem xGenericListItem;
/*用来从事件链表中引用一个任务*/
xListItem xEventListItem;
/*任务的优先级,0表示优先级最低*/
unsigned portBASE_TYPE uxPriority;
/*指向堆栈的开始*/
portSTACK_TYPE *pxStack;
/*创建任务的时候给取的描述性名字。这个功能只用在debug模式。*/
signed char pcTaskName[ configMAX_TASK_NAME_LEN ];
/*如果堆栈是正生长的话,定义个指针指向堆栈架构的末尾*/
#if ( portSTACK_GROWTH > 0 )
portSTACK_TYPE *pxEndOfStack;
#endif
/*若允许临界区嵌套的话,定义嵌套计数器*/
#if ( portCRITICAL_NESTING_IN_TCB == 1 )
unsigned portBASE_TYPE uxCriticalNesting;
#endif
/*如果使能跟踪功能,会创建一个变量uxTCBNumber,
当TCB创建的时候,变量值会自增。它用来帮助调试人员
判断任务是什么时候删除的,又是什么时候重新创建的。
此外,还会创建一个变量uxTaskNumber,这个变量是专
门用来跟踪第三方代码的。*/
#if ( configUSE_TRACE_FACILITY == 1 )
unsigned portBASE_TYPE uxTCBNumber;
unsigned portBASE_TYPE uxTaskNumber;
#endif
/*如果使用互斥量,则定义一个变量保存任务最后被分配给的优先级,
这个变量为优先级继承机制使用(优先级继承是用来解决优先级反转的问题)*/
#if ( configUSE_MUTEXES == 1 )
unsigned portBASE_TYPE uxBasePriority;
#endif
/*应用任务标签(还不知道用在哪儿)。*/
#if ( configUSE_APPLICATION_TASK_TAG == 1 )
pdTASK_HOOK_CODE pxTaskTag;
#endif
/*如果生成运行时间状态的话,创建个变量,用来存储任务在运行状态中已经耗费的时间。*/
#if ( configGENERATE_RUN_TIME_STATS == 1 )
unsigned long ulRunTimeCounter;
#endif
/*(这个特性,不太明白哎,后续补充了。)*/
#if ( configUSE_NEWLIB_REENTRANT == 1 )
/* Allocate a Newlib reent structure that is specific to this task.
Note Newlib support has been included by popular demand, but is not
used by the FreeRTOS maintainers themselves. FreeRTOS is not
responsible for resulting newlib operation. User must be familiar with
newlib and must provide system-wide implementations of the necessary
stubs. Be warned that (at the time of writing) the current newlib design
implements a system-wide malloc() that must be provided with locks. */
struct _reent xNewLib_reent;
#endif
} tskTCB;
复制代码
Enjoy!
赞
0
收藏
0
评论
6
分享
发布时间:2015-1-13 14:58
举报
请先
登录
后回复
6个回答
fjjjnk1234
回答时间:2015-1-13 15:28:38
a1024a.1 32b0c
感谢分享!
赞
评论
回复
支持
反对
阿松松
回答时间:2015-1-13 15:50:14
a0a.1 32b0c
fjjjnk1234 发表于 2015-1-13 15:28
感谢分享!
谢捧场。。
赞
评论
回复
支持
反对
flintlovesam
回答时间:2015-2-11 22:34:02
a0a.1 32b0c
连优先级翻转也知道 冲这点赞一个
赞
评论
回复
支持
反对
feel-376797
回答时间:2015-2-16 07:24:20
a1024a.1 32b0c
谢谢分享
赞
评论
回复
支持
反对
党国特派员
回答时间:2015-2-16 10:29:02
a1024a.1 32b0c
谢谢分享
赞
评论
回复
支持
反对
foxglove
回答时间:2015-2-16 10:47:49
a0a.1 32b0c
tskTaskControlBlock
赞
评论
回复
支持
反对
所属标签
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
谢捧场。。