栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

6 freertos任务-创建多任务

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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) {}


}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/691665.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号