FreeRTOS学习记录--任务创建函数详解

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475
开局一张图。一步一步分析就好。

(一)什么是任务?

在多任务系统中,我们按照功能不同,把整个系统分割成一个个独立的,且无法返回的函数,这个函数我们称为任务;任务包含几个属性:任务堆栈,任务函数、任务控制块、任务优先级;下面主要介绍一下任务控制块,其他都比较容易理解。

(二)什么是任务控制块?

任务控制块内包含了该任务的全部信息,任务的执行需要通过任务调度器来控制,那么任务调度器怎么“控制”任务实体的呢?就要抓住任务的小辫子—“任务控制块”,系统对任务的全部操作都可以通过任务控制块来实现!它是一种特别的数据结构。

在任务创建函数xTaskCreat()创建任务的时候就会自动给每个任务分配一个任务控制块。

复制代码

typedef struct tskTaskControlBlock
{
 volatile StackType\_t    *pxTopOfStack;    /*任务堆栈栈顶指针*/

    #if ( portUSING\_MPU\_WRAPPERS == 1 )
 xMPU\_SETTINGS xMPUSettings; /*MPU相关设置*/
    #endif

 ListItem\_t xStateListItem; /*状态列表项,这是一个内置在TCB控制块中的一个链表节点,通过这个节点,将任务挂到其他链表中 比如就绪列表,阻塞列表,挂起列表等*/
 ListItem\_t xEventListItem; /*事件列表项,用于引用事件列表中的任务*/
 UBaseType\_t uxPriority; /*任务优先级*/
 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; /*debug的时候用到*/
 UBaseType\_t uxTaskNumber; /*trace的时候用到*/
    #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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值