六 FreeRtos创建多任务源码
#include
#include "board.h"
#include "led.h"
#include "uart.h"
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"
#include "FreeRTOS.h"
#include "task.h"
static TaskHandle_t LED1_Task_Handle;
static TaskHandle_t LED2_Task_Handle;
static TaskHandle_t LED3_Task_Handle;
static TaskHandle_t LED4_Task_Handle;
static TaskHandle_t LED5_Task_Handle;
static TaskHandle_t LED6_Task_Handle;
static TaskHandle_t LED7_Task_Handle;
static TaskHandle_t LED8_Task_Handle;
#define TASK_STACK_SIZE 32
static void prvSetupHardware(void)
{
SystemCoreClockUpdate();
DEBUGINIT();
led_Init() ;
Board_UARTPutSTR("build date: " __DATE__ " build time: " __TIME__ "n");
}
static void vLED1_Task (void *pvParameters)
{
bool LedState = false;
while (1) {
Board_LED_Set(0, LedState);
LedState = (bool) !LedState;
vTaskDelay(500);
}
}
static void vLED2_Task (void *pvParameters)
{
bool LedState = false;
while (1) {
Board_LED_Set(1, LedState);
LedState = (bool) !LedState;
vTaskDelay(500);
}
}
static void vLED3_Task (void *pvParameters)
{
bool LedState = false;
while (1) {
Board_LED_Set(2, LedState);
LedState = (bool) !LedState;
vTaskDelay(500);
}
}
static void vLED4_Task (void *pvParameters)
{
bool LedState = false;
while (1) {
Board_LED_Set(3, LedState);
LedState = (bool) !LedState;
vTaskDelay(500);
}
}
static void vLED5_Task (void *pvParameters)
{
bool LedState = false;
while (1) {
Board_LED_Set(4, LedState);
LedState = (bool) !LedState;
vTaskDelay(500);
}
}
static void vLED6_Task (void *pvParameters)
{
bool LedState = false;
while (1) {
Board_LED_Set(5, LedState);
LedState = (bool) !LedState;
vTaskDelay(500);
}
}
static void vLED7_Task (void *pvParameters)
{
bool LedState = false;
while (1) {
Board_LED_Set(6, LedState);
LedState = (bool) !LedState;
vTaskDelay(500);
}
}
static void vLED8_Task (void *pvParameters)
{
bool LedState = false;
while (1) {
Board_LED_Set(7, LedState);
LedState = (bool) !LedState;
vTaskDelay(500);
}
}
static void AppTaskCreate()
{
baseType_t xReturn =pdPASS;
taskENTER_CRITICAL();//进入临界区,禁止中断打断
//
xReturn=xTaskCreate(vLED1_Task,
"vLED1_Task",
TASK_STACK_SIZE,
NULL,
(tskIDLE_PRIORITY + 1UL),
(TaskHandle_t *) &LED1_Task_Handle);
xReturn=xTaskCreate(vLED2_Task,
"vLED2_Task",
TASK_STACK_SIZE,
NULL,
(tskIDLE_PRIORITY + 1UL),
(TaskHandle_t *) &LED2_Task_Handle);
xReturn=xTaskCreate(vLED3_Task,
"vLED3_Task",
TASK_STACK_SIZE,
NULL,
(tskIDLE_PRIORITY + 1UL),
(TaskHandle_t *) &LED3_Task_Handle);
//只能创建3个任务或者更少时,是堆空间不够,需要扩大 configTOTAL_HEAP_SIZE 或者第三个参数的大小。
xReturn=xTaskCreate(vLED4_Task,
"vLED4_Task",
TASK_STACK_SIZE,
NULL,
(tskIDLE_PRIORITY + 2UL),
(TaskHandle_t *) &LED4_Task_Handle);
xReturn=xTaskCreate(vLED5_Task,
"vLED5_Task",
TASK_STACK_SIZE,
NULL,
(tskIDLE_PRIORITY + 2UL),
&LED5_Task_Handle);
xReturn=xTaskCreate(vLED6_Task,
"vLED6_Task",
TASK_STACK_SIZE,
NULL,
(tskIDLE_PRIORITY + 2UL),
&LED6_Task_Handle);
xReturn=xTaskCreate(vLED7_Task,
"vLED7_Task",
TASK_STACK_SIZE,
NULL,
(tskIDLE_PRIORITY + 2UL),
&LED7_Task_Handle);
xReturn=xTaskCreate(vLED8_Task,
"vLED8_Task",
TASK_STACK_SIZE,
NULL,
(tskIDLE_PRIORITY + 2UL),
&LED8_Task_Handle);
if(pdPASS==xReturn)
{
// printf("创建LED_Task任务成功rn");
}
// vTaskDelete(LED1_Task_Handle);//删除AppTaskCreate任务
// vTaskDelete(LED2_Task_Handle);//删除AppTaskCreate任务
// vTaskDelete(LED3_Task_Handle);//删除AppTaskCreate任务
// vTaskDelete(LED4_Task_Handle);//删除AppTaskCreate任务
taskEXIT_CRITICAL(); //退出临界区
}
int main(void)
{
prvSetupHardware();
// Board_UARTPutSTR("FreeRTOS 动态创建任务nr");
// xTaskCreate((TaskFunction_t)AppTaskCreate,//任务入口
// (const char*)"AppTaskCreate",//任务名字
// configMINIMAL_STACK_SIZE,//任务栈大小
// (void*)NULL,//任务参数
// (UbaseType_t)0,//任务优先级
// (TaskHandle_t)&AppTaskCreate_Handle
// );
AppTaskCreate();
vTaskStartScheduler();//任务调度
while (1) {}
}