FreeROTS创建和删除函数(静态方法)

1.改宏,只有在configSUPPORT_STATIC_ALLOCATION==1时,TaskHandle_t xTaskCreateStatic方能编译

2两个函数未定义:1.vApplicationGetIdleTaskMemory

                             2.vApplicationGetTimerTaskMemory

static StackType_t IdleTaskStack[configMINIMAL_STACK_SIZE];
static StaticTask_t IdleTaskTCB;
static StackType_t TimerTaskStack[configMINIMAL_STACK_SIZE];
static StaticTask_t TimerTaskTCB;
//空闲任务所需内存
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, 
                                StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize )
{
		*ppxIdleTaskTCBBuffer=&IdleTaskTCB;
		*ppxIdleTaskStackBuffer=IdleTaskStack; 
		*pulIdleTaskStackSize=configMINIMAL_STACK_SIZE;
}
//定时器任务所需内存
void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer, 
StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize )
{
		*ppxTimerTaskTCBBuffer=&TimerTaskTCB;
		*ppxTimerTaskStackBuffer=TimerTaskStack; 
		*pulTimerTaskStackSize=configMINIMAL_STACK_SIZE;
}

编写测试代码:

 1.开始任务框架

 2.任务一 任务二框架

TaskHandle_t StartTask_Handler;
//
void start_task( void * pvParameters );
void Task1_task( void * pvParameters );
void Task2_task( void * pvParameters );
//
#define task1_TASK_SIZE 128
#define task1_TASK_Priority 2
StackType_t task1TackStack[task1_TASK_Priority];
StaticTask_t task1TaskTCB;

#define task2_TASK_SIZE 128
#define task2_TASK_Priority 3
StackType_t task2TackStack[task2_TASK_SIZE];
StaticTask_t task2TaskTCB;


#define START_TASK_SIZE 128
#define START_TASK_Priority 1
StackType_t StartTackStack[START_TASK_SIZE];
StaticTask_t StartTaskTCB;

int main(void)
{
    Cache_Enable();                 //´ò¿ªL1-Cache
    HAL_Init();				        //³õʼ»¯HAL¿â
    Stm32_Clock_Init(432,25,2,9);   //ÉèÖÃʱÖÓ,216Mhz 
    delay_init(216);                //ÑÓʱ³õʼ»¯
	uart_init(115200);		        //´®¿Ú³õʼ»¯
    LED_Init();                     //³õʼ»¯LED
	
	StartTask_Handler=xTaskCreateStatic((TaskFunction_t) start_task,
									 (char *)  "start_task",
									 (uint32_t) START_TASK_SIZE,
									(void *) 		NULL,
									(UBaseType_t) START_TASK_Priority,
									(StackType_t *) StartTackStack,
									(StaticTask_t * ) &StartTaskTCB );
        vTaskStartScheduler();          //¿ªÆôÈÎÎñµ÷¶È
}
void start_task( void * pvParameters )
{
		StartTask_Handler=xTaskCreateStatic((TaskFunction_t) Task1_task,
									 (char *)  "task1_task",
									 (uint32_t) task1_TASK_SIZE,
									(void *) 		NULL,
									(UBaseType_t) task1_TASK_Priority,
									(StackType_t *) task1TackStack,
									(StaticTask_t * ) &task1TaskTCB );
									
		StartTask_Handler=xTaskCreateStatic((TaskFunction_t) Task2_task,
								 (char *)  "Task2_task",
								 (uint32_t) task2_TASK_SIZE,
								(void *) 		NULL,
								(UBaseType_t) task2_TASK_Priority,
								(StackType_t *) task2TackStack,
								(StaticTask_t * ) &task2TaskTCB );
		vTaskDelete(StartTask_Handler);
}
void Task1_task( void * pvParameters )
{
	while(1)
	{
		LED0_Toggle;
		vTaskDelay(1000);
	}
}

void Task2_task( void * pvParameters )
{
	while(1)
	{
		LED1_Toggle;
		vTaskDelay(300);
	}
}


你可能感兴趣的:(freeROTS)