FreeRTOS学习笔记5-静态方式创建任务函数

配置完成后的进行任务创建,使用静态方式创建任务时需要使将宏 configSUPPORT_STATIC_ALLOCATION设置为 1,即使用静态内存。还需要将函数

vApplicationGetIdleTaskMemory()和 ApplicationGetTimerTaskMemory()进行实现。通过这两个函数来给空闲任务 和定时器服的任务堆 栈和任务控制块分配内存。在maiinc.c中进行定义。定义静态的任务堆栈和任务控制块内存,然后将这些内存传递给函数参数。最后创建空闲任务和定时器任务的API函数会调用这两个函数。

这两个函数我们在mainc.c中定义:

//空闲任务任务堆栈

static StackType_t IdleTaskStack[configMINIMAL_STACK_SIZE];

//空闲任务控制块 static StaticTask_t IdleTaskTCB; 

//定时器服务任务堆栈

static StackType_t TimerTaskStack[configTIMER_TASK_STACK_DEPTH];

//定时器服务任务控制块

static StaticTask_t TimerTaskTCB;

//获取空闲任务地堆栈和控制块内存,因为本例程使用的 

//静态内存,因此空闲任务的堆栈和控制块就应该 静态内存,因此空闲任务的堆栈和控制块就应该

//有用户来提供, 有用户来提供, FreeRTOS提供了接口函数 vApplicationGetIdleTaskMemory()

//实现此函数即可。 实现此函数即可。

//ppxIdleTaskTCBBuffer:任务控制块内存

//ppxIdleTaskStackBuffer:任务堆栈内存

//pulIdleTaskStackSize:任务堆栈大小

void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer,

                  StackType_t **ppxIdleTaskStackBuffer,

                   uint32_t *pulIdleTaskStackSize)

{

*ppxIdleTaskTCBBuffer=&IdleTaskTCB;

*ppxIdleTaskStackBuffer=IdleTaskStack;

*pulIdleTaskStackSize=configMINIMAL_STACK_SIZE;

}

//获取定时器服务任的堆栈和控制块内存

//ppxTimerTaskTCBBuffer:任务控制块内存 //ppxTimerTaskStackBuffer:任务堆栈内存

//pulTimerTaskStackSize:任务堆栈大小 任务堆栈大小

void vApplicationGetTimerTaskMemory(StaticTask_t **ppxTimerTaskTCBBuffer,

                   StackType_t **ppxTimerTaskStackBuffer,

                    uint32_t *pulTimerTaskStackSize)

{

  *ppxTimerTaskTCBBuffer=&TimerTaskTCB;

  *ppxTimerTaskStackBuffer=TimerTaskStack;               

  *pulTimerTaskStackSize=configTIMER_TASK_STACK_DEPTH;

}

注:定义任务控制块时,类型要用StaticTask_t,而不是TCB_t或tskTCB

xTaskCreateStatic()和 xTaskCreate()没有太大的区别。大部分是相同的。创建任务的过程中。还是使用动态的方式更为简单。静态的方式了解一下即可。需要使用时再深入研究。

posted @ 2017-07-26 23:32  AugusCrazy  阅读(2803)  评论(0编辑  收藏  举报