FreeRTOS静态任务
#流程
1.复制一份移植好的工程或者复制一份之前配置好的动态任务创建删除工程
2.系统设置
3.增加空闲任务
4.增加定时器任务
5.任务创建和逻辑书写
6.编译
#系统设置
#define configSUPPORT_STATIC_ALLOCATION 1 //静态(这个一定要写1)
然后编译发现两个错误,这两个错误分别是没有找到空闲任务和没有找到定时器任务
#增加空闲任务
vApplicationGetIdleTaskMemory()空闲任务函数
首先建立空闲任务模板
//获取空闲任务的任务堆栈和任务控制模块地址,因为使用的是静态内存,因此空闲任务的任务堆栈和任务控制块的内存用户自己定义
//ppxIdleTaskTCBBuffer:任务控制块内存
//ppxIdleTaskStackBuffer:任务堆栈内存
//pulIdleTaskStackSize:任务堆栈大小
void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer,
StackType_t **ppxIdleTaskStackBuffer,
uint32_t *pulIdleTaskStackSize)
{
*ppxIdleTaskTCBBuffer=&IdleTaskTCB;
*ppxIdleTaskStackBuffer=IdleTaskStack;
*pulIdleTaskStackSize=configMINIMAL_STACK_SIZE;
}
然后添加变量声明
//空闲任务堆栈
static StackType_t IdleTaskStack[configMINIMAL_STACK_SIZE];
//空闲任务控制块
static StaticTask_t IdleTaskTCB;
#增加定时器任务
首先建立定时器任务模板
//获取定时器任务的服务任务的任务堆栈和任务控制块内存
//ppxTimerTaskTCBBuffer:任务控制块内存
//ppxTimerTaskStackBuffer:任务堆栈内存
//pulTimerTaskStackSize:任务堆栈大小
void vApplicationGetTimerTaskMemory(StaticTask_t **ppxTimerTaskTCBBuffer,
StackType_t **ppxTimerTaskStackBuffer,
uint32_t *pulTimerTaskStackSize)
{
*ppxTimerTaskTCBBuffer=&TimerTaskTCB;
*ppxTimerTaskStackBuffer=TimerTaskStack;
*pulTimerTaskStackSize=configTIMER_TASK_STACK_DEPTH;
}
然后添加变量声明
//定时器服务任务堆栈
static StackType_t TimerTaskStack[configTIMER_TASK_STACK_DEPTH];
//定时器服务任务控制块
static StaticTask_t TimerTaskTCB;
#任务创建和逻辑书写
下面是具体代码&