你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

FreeRTOS源代码分析(tskTaskControlBlock)

[复制链接]
阿松松 发布时间:2015-1-13 14:58
本帖最后由 阿松松 于 2015-1-13 15:49 编辑

task.c中,关于TCB。

  1. /*每个任务创建的时候都会分配TCB(任务控制块)。
  2. TCB存储着任务状态信息,包括指向任务的上下文(
  3. 任务的运行时刻的环境,包括寄存器的值)的指针。 */
  4. typedef struct tskTaskControlBlock
  5. {
  6. /*指向任务堆栈中最后一次存入的item,这个item必须是TCB结构体的第一个成员。*/
  7.         volatile portSTACK_TYPE        *pxTopOfStack;

  8. /*MPU设置被作为port layer(个人理解为平台层)的一部分。这个变量必须是TCB结构体的第二个成员。*/
  9.         #if ( portUSING_MPU_WRAPPERS == 1 )
  10.                 xMPU_SETTINGS xMPUSettings;
  11.         #endif

  12. /*任务的状态链表结点参考,指示任务的状态(Ready,Blocked,Suspended)*/
  13.         xListItem                                xGenericListItem;

  14. /*用来从事件链表中引用一个任务*/
  15.         xListItem                                xEventListItem;

  16. /*任务的优先级,0表示优先级最低*/
  17.         unsigned portBASE_TYPE        uxPriority;

  18. /*指向堆栈的开始*/
  19.         portSTACK_TYPE                        *pxStack;

  20. /*创建任务的时候给取的描述性名字。这个功能只用在debug模式。*/
  21.         signed char                                pcTaskName[ configMAX_TASK_NAME_LEN ];

  22. /*如果堆栈是正生长的话,定义个指针指向堆栈架构的末尾*/
  23.         #if ( portSTACK_GROWTH > 0 )
  24.                 portSTACK_TYPE *pxEndOfStack;
  25.         #endif

  26. /*若允许临界区嵌套的话,定义嵌套计数器*/
  27.         #if ( portCRITICAL_NESTING_IN_TCB == 1 )
  28.                 unsigned portBASE_TYPE uxCriticalNesting;
  29.         #endif

  30. /*如果使能跟踪功能,会创建一个变量uxTCBNumber,
  31. 当TCB创建的时候,变量值会自增。它用来帮助调试人员
  32. 判断任务是什么时候删除的,又是什么时候重新创建的。
  33. 此外,还会创建一个变量uxTaskNumber,这个变量是专
  34. 门用来跟踪第三方代码的。*/
  35.         #if ( configUSE_TRACE_FACILITY == 1 )
  36.                 unsigned portBASE_TYPE        uxTCBNumber;        
  37.                 unsigned portBASE_TYPE  uxTaskNumber;
  38.         #endif

  39. /*如果使用互斥量,则定义一个变量保存任务最后被分配给的优先级,
  40. 这个变量为优先级继承机制使用(优先级继承是用来解决优先级反转的问题)*/
  41.         #if ( configUSE_MUTEXES == 1 )
  42.                 unsigned portBASE_TYPE uxBasePriority;        
  43.         #endif

  44. /*应用任务标签(还不知道用在哪儿)。*/
  45.         #if ( configUSE_APPLICATION_TASK_TAG == 1 )
  46.                 pdTASK_HOOK_CODE pxTaskTag;
  47.         #endif

  48. /*如果生成运行时间状态的话,创建个变量,用来存储任务在运行状态中已经耗费的时间。*/
  49.         #if ( configGENERATE_RUN_TIME_STATS == 1 )
  50.                 unsigned long ulRunTimeCounter;
  51.         #endif

  52. /*(这个特性,不太明白哎,后续补充了。)*/
  53.         #if ( configUSE_NEWLIB_REENTRANT == 1 )
  54.                 /* Allocate a Newlib reent structure that is specific to this task.
  55.                 Note Newlib support has been included by popular demand, but is not
  56.                 used by the FreeRTOS maintainers themselves.  FreeRTOS is not
  57.                 responsible for resulting newlib operation.  User must be familiar with
  58.                 newlib and must provide system-wide implementations of the necessary
  59.                 stubs. Be warned that (at the time of writing) the current newlib design
  60.                 implements a system-wide malloc() that must be provided with locks. */
  61.                 struct _reent xNewLib_reent;
  62.         #endif

  63. } tskTCB;
复制代码
Enjoy!
收藏 评论6 发布时间:2015-1-13 14:58

举报

6个回答
fjjjnk1234 回答时间:2015-1-13 15:28:38
感谢分享!
阿松松 回答时间:2015-1-13 15:50:14

谢捧场。。
flintlovesam 回答时间:2015-2-11 22:34:02
连优先级翻转也知道 冲这点赞一个
feel-376797 回答时间:2015-2-16 07:24:20
谢谢分享
党国特派员 回答时间:2015-2-16 10:29:02
谢谢分享
foxglove 回答时间:2015-2-16 10:47:49
tskTaskControlBlock

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版