目录
main.c使用示例
#include "main.h"
#include "stm32f10x.h" // Device header
#include "delay.h"
#include "uart.h"
#include "FreeRTOS.h"
#include "task.h"
#include "portmacro.h"
#if configSUPPORT_DYNAMIC_ALLOCATION
void task(void *parameter);
#define TASK_NAME "task"
#define TASK_SIEZ (64)
#define TASK_PRIORITY (1)
TaskHandle_t *TASK_HANDLE;
#endif
#if configSUPPORT_STATIC_ALLOCATION
static StaticTask_t IdleTcbbuffer;
static StackType_t IDleTaskbuffer[configMINIMAL_STACK_SIZE];
void vApplicationGetIdleTaskMemory
(
StaticTask_t **ppxIdleTaskTCBBuffer,
StackType_t **ppxIdleTaskStackBuffer,
uint32_t *pulIdleTaskStackSize
)
{
*ppxIdleTaskTCBBuffer = &IdleTcbbuffer;
*ppxIdleTaskStackBuffer = IDleTaskbuffer;
*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
}
void task(void *parameter);
#define TASK_NAME "task"
#define TASK_SIEZ (64)
#define TASK_PRIORITY (1)
StackType_t taskStack[TASK_SIEZ];
StaticTask_t TASK_HANDLE;
#endif
int main(void)
{
SysTick_init();//系统时钟初忋化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置丿斿优先级分绿
uart_init(115200);
xTaskCreateStatic(task,
TASK_NAME,
TASK_SIEZ,
NULL,
TASK_PRIORITY,
taskStack,
&TASK_HANDLE
);
vTaskStartScheduler();//吿动调度器
while(1);
}
void task(void *parameter)
{
while(1)
{
printf("task create succeed\r\n");
vTaskDelay(500);
printf("delay 500\r\n");
vTaskDelay(500);
}
}
使用时configSUPPORT_STATIC_ALLOCATION要为1
//是否使用动态内存分配
#define configSUPPORT_DYNAMIC_ALLOCATION 0
//是否使用静态内存分配
#define configSUPPORT_STATIC_ALLOCATION 1
//当然configSUPPORT_DYNAMIC_ALLOCATION 和configSUPPORT_STATIC_ALLOCATION 可以同时使用
使用静态分配内存时要实现空闲任务接口
static StaticTask_t IdleTcbbuffer;
static StackType_t IDleTaskbuffer[configMINIMAL_STACK_SIZE];
void vApplicationGetIdleTaskMemory
(
StaticTask_t **ppxIdleTaskTCBBuffer,
StackType_t **ppxIdleTaskStackBuffer,
uint32_t *pulIdleTaskStackSize
)
{
*ppxIdleTaskTCBBuffer = &IdleTcbbuffer;
*ppxIdleTaskStackBuffer = IDleTaskbuffer;
*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
}
静态创建任务函数与动态的创建任务函数十分相似。
xTaskCreateStatic(task,
TASK_NAME,
TASK_SIEZ,
NULL,
TASK_PRIORITY,
taskStack, //栈内存首地址,本质还是数组
&TASK_HANDLE //静态任务控制块
);
源码分析
待续