6 freertos任务-创建多任务

6 freertos任务-创建多任务,第1张

6 freertos任务-创建多任务 六 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) {}


}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5692150.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存