提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
动态创建比较简单,可以参考我上一篇的历程。在freertos_demo.c文件里
移植C8T6
提示:以下是本篇文章正文内容,下面案例可供参考
一、前期准备
1.打开宏定义
configSUPPORT_STATIC_ALLOCATION 这个宏定义默认关闭,现在打开置为1
现在进行编译会发现有两个报错
双击vTaskStartScheduler
右键追踪过去,这个函数FreRTOS已经定义过了,只需要我们写一个就行
重新双击vTaskStartScheduler右键追踪,向下滑动
可以看见这个函数。这是说明创建任务后默认会使用定时器
而回到FreeRTOSConfig.h文件,查找软件定时器
我们可以看见软件定时器这里是1,所以我们需要写一个软件定时器函数
右键xTimerCreateTimerTask追踪,这就是我们需要重新写的函数
2.写两个接口函数
vApplicationGetIdleTaskMemory
获得空闲任务堆栈和地址
vApplicationGetTimerTaskMemory
获得定时器堆栈和地址
//空闲任务堆栈数组
static StackType_t Idle_Task_Stack[configMINIMAL_STACK_SIZE];
//定时器堆栈数组
static StackType_t Timer_Task_Stack[configTIMER_TASK_STACK_DEPTH];
//空闲任务控制块
static StaticTask_t Idle_Task_TCB;
//定时器任务控制块
static StaticTask_t Timer_Task_TCB;
void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer,
StackType_t **ppxIdleTaskStackBuffer,
uint32_t *pulIdleTaskStackSize)
{
*ppxIdleTaskTCBBuffer=&Idle_Task_TCB;//控制块内存
*ppxIdleTaskStackBuffer=Idle_Task_Stack;//堆栈数组
*pulIdleTaskStackSize=configMINIMAL_STACK_SIZE;//堆栈内存
}
void vApplicationGetTimerTaskMemory(StaticTask_t **ppxTimerTaskTCBBuffer,
StackType_t