5 freertos任务-创建单任务

本文档提供了一个使用FreeRTOS操作系统在微控制器上动态创建任务的例子。主要展示了如何初始化硬件、设置系统时钟、创建并删除任务以及实现LED灯的周期性闪烁。在`main()`函数中,首先进行板级外设初始化,然后创建`AppTaskCreate`任务,该任务内部会创建名为`vLEDTask0`的LED闪烁任务,并在完成后删除自身。整个流程旨在演示FreeRTOS的任务管理和实时调度功能。
摘要由CSDN通过智能技术生成

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


}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值