五 FreeRtos创建单任务
#include <stdio.h>
#include "board.h"
#include "led.h"
#include "uart.h"
/*** System oscillator rate and clock rate on the CLKIN pin ****/
/**/const uint32_t OscRateIn = MAIN_OSC_XTAL_FREQ_HZ; /**/
/**/const uint32_t ExtRateIn = EXT_CLOCK_IN_FREQ_HZ; /**/
/***************************************************************/
//系统复位
#define System_restart (LPC_SWM->PINENABLE0 = 0xffffffffUL)
#include "FreeRTOSConfig.h"
/* FreeRTOS头文件 */
#include "FreeRTOS.h"
#include "task.h"
/**************************** 任务句柄 ********************************/
/*
* 任务句柄是一个指针,用于指向一个任务。
*/
/* 创建任务句柄 */
static TaskHandle_t AppTaskCreate_Handle;
/* LED任务句柄 */
static TaskHandle_t LED0_Task_Handle;
/* Sets up system hardware
**********************************************************************
* @ 函数名 : BSP_Init
* @ 功能说明: 板级外设初始化,所有板子上的初始化均可放在这个函数里面
* @ 参数 :
* @ 返回值 : 无
*********************************************************************/
static void prvSetupHardware(void)
{
SystemCoreClockUpdate();
DEBUGINIT();
led_Init() ;
Board_UARTPutSTR("build date: " __DATE__ " build time: " __TIME__ "\n");
}
/**********************************************************************
* @ 函数名 : vLED_Task0
* @ 功能说明: LED_Task任务主体
* @ 参数 :
* @ 返回值 : 无
********************************************************************/
static void vLEDTask0 (void *pvParameters)
{
bool LedState = false;
while (1) {
Board_LED_Set(0, LedState);
LedState = (bool) !LedState;
vTaskDelay(configTICK_RATE_HZ/2);
}
}
/***********************************************************************
* @ 函数名 : AppTaskCreate
* @ 功能说明: 为了方便管理,所有的任务创建函数都放在这个函数里面
* @ 参数 : 无
* @ 返回值 : 无
**********************************************************************/
static void AppTaskCreate(void *pvParameters)
{
BaseType_t xReturn =pdPASS;
taskENTER_CRITICAL();//进入临界区,禁止中断打断
xReturn=xTaskCreate(vLEDTask0,
"vTaskLed0",
configMINIMAL_STACK_SIZE,
NULL,
(tskIDLE_PRIORITY + 2UL),
(TaskHandle_t *) &LED0_Task_Handle);
if(pdPASS==xReturn)
{
// printf("创建LED_Task任务成功\r\n");
}
vTaskDelete(AppTaskCreate_Handle);//删除AppTaskCreate任务
//
taskEXIT_CRITICAL(); //退出临界区
}
/**
* @brief main routine for blinky example
* @return Function should not exit.
*/
int main(void)
{
BaseType_t xReturn =pdPASS;
prvSetupHardware();
Board_UARTPutSTR("FreeRTOS 动态创建任务\n\r");
xReturn=xTaskCreate((TaskFunction_t)AppTaskCreate,//任务入口
(const char*)"AppTaskCreate",//任务名字
(uint16_t)128,//任务栈大小
(void*)NULL,//任务参数
(UBaseType_t)1,//任务优先级
(TaskHandle_t)&AppTaskCreate_Handle
);
// xReturn=xTaskCreate(AppTaskCreate,
// "AppTaskCreate",
// configMINIMAL_STACK_SIZE,
// NULL,
// (tskIDLE_PRIORITY + 0),
// (TaskHandle_t *) NULL);
if(pdPASS==xReturn)
{
vTaskStartScheduler();//任务调度
}
/* Loop forever */
while (1) {}
}