• freertos动态和静态任务创建的区别


       //静态创建。

    //任务优先级

    #define START_TASK_PRIO     1

    //任务堆栈大小    

    #define START_STK_SIZE      128  

    //任务堆栈

    StackType_t StartTaskStack[START_STK_SIZE];

    //任务控制块

    StaticTask_t StartTaskTCB;

    //任务句柄

    TaskHandle_t StartTask_Handler;

    //任务函数

    void start_task(void *pvParameters);

        TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,//函数指针

                                        const char * const pcName,函数名,字符串

                                        const uint32_t ulStackDepth,栈的长度(不是大小,)

                                        void * const pvParameters,给函数传递的参数

                                        UBaseType_t uxPriority,任务优先级

                                        StackType_t * const puxStackBuffer栈的起始地址,

                                        StaticTask_t * const pxTaskBuffer 任务控制块的指针) /(返回值为任务句柄)

        {        if( ( pxTaskBuffer != NULL ) && ( puxStackBuffer != NULL ) )

            {

                pxNewTCB = ( TCB_t * ) pxTaskBuffer;

                pxNewTCB->pxStack = ( StackType_t * ) puxStackBuffer;//指向栈底

            }        

    }

    //动态创建

    //任务优先级

    #define START_TASK_PRIO     1

    //任务堆栈大小    

    #define START_STK_SIZE      128  

    //任务句柄

    TaskHandle_t StartTask_Handler;

    //任务函数

    void start_task(void *pvParameters);

        BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,函数指针

                                const char * const pcName,函数名字符串

                                const uint16_t usStackDepth,栈长度

                                void * const pvParameters,任务参数

                                UBaseType_t uxPriority,优先级

                                TaskHandle_t * const pxCreatedTask任务句柄

    ) (返回值不是任务句柄

        {

        TCB_t *pxNewTCB;

        BaseType_t xReturn;

                pxStack = ( StackType_t * ) pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) );

                pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) )

                        /* Store the stack location in the TCB. */

                        pxNewTCB->pxStack = pxStack;

    由上可知,动态创建任务时任务控制块和栈空间是动态分配的,

    静态创建任务时任务控制块和栈空间是提前分配好的,是静态的。

  • 相关阅读:
    docker安装网易云音乐(yesplaymusic)
    模拟电路设计(35)---几种脉宽调制型开关电路
    LayUI之增删改查
    vscode配置Go支持
    PoseiSwap的趋势性如何体现?
    Wireshark抓包分析TCP协议:三次握手和四次挥手
    Golang数据结构和算法
    21天经典算法之快速排序
    ES——Fluent-bit——kibana组建日志收集系统---docker方式部署
    水果店圈子:开个水果店前景如何,现在做水果店行业还赚钱吗
  • 原文地址:https://blog.csdn.net/m0_54797575/article/details/133384131