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;

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

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

你可能感兴趣的:(Freertos,stm32,嵌入式实时数据库,单片机)