FreeRtos学习笔记-------------用动态方法创建和删除任务

FreeRtos动态方法创建删除任务

利用函数xTaskCreate

/*任务创建函数*/
xTaskCreate( TaskFunction_t pxTaskCode,
                const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
                const configSTACK_DEPTH_TYPE usStackDepth,
                void * const pvParameters,
                UBaseType_t uxPriority,
                TaskHandle_t * const pxCreatedTask );
/*任务函数*/
void NAME_OF_YOUR_Task()
{
//任务一般为死循环程序
}
                

其中
pxTaskCode 为任务函数名称
pcName 双引号加名称
configSTACK_DEPTH_TYPE usStackDepth 为堆栈大小
pvParameters 为参数
uxPriority 为优先级
pxCreatedTask 任务句柄

创建任务时要注意 利用强制类型转换来避免数据类型出错
xTaskCreate(    (TaskFunction_t) pxTaskCode,
                (const char *) pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
                (uint16_t) usStackDepth,
                (void * ) pvParameters,
                (UBaseType_t) uxPriority,
                (TaskHandle_t *) pxCreatedTask );
               

/*用一个开始任务来创建两个任务使PG1和PG8两个LED以不同频率闪烁*/
#define START_TASK_DEPTH    120
#define START_TASK_PRIO      1

#define TASK_1_DEPTH    120    //堆栈
#define TASK_1_PRIO      3 //优先级


#define TASK_2_DEPTH    120    //堆栈
#define TASK_2_PRIO      2 //优先级


TaskHandle_t START_TASK_Handle;
TaskHandle_t TASK_1_Handle;
TaskHandle_t TASK_2_Handle;

void Start_Task( void * pvParameters)
{
	xTaskCreate( (TaskFunction_t) Task_1,
                (const char *)  "Task_1", /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
                (uint16_t) TASK_1_DEPTH,
                (void *) NULL,
                (UBaseType_t) TASK_1_PRIO,
                (TaskHandle_t *) &TASK_1_Handle );
								

		
	xTaskCreate( (TaskFunction_t) Task_2,
                (const char *)  "Task_2", /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
                (uint16_t) TASK_2_DEPTH,
                (void *) NULL,
                (UBaseType_t) TASK_2_PRIO,
                (TaskHandle_t *) &TASK_2_Handle );
							
								
								
								
			    vTaskDelete(START_TASK_Handle); //NULL表示删除自身也可以
					

								
}


void Task_1( void * pvParameters)
{
	while(1)
	{
	vTaskDelay(300);
	GPIO_ResetBits(GPIOG,GPIO_Pin_1 );
  vTaskDelay(300);
	GPIO_SetBits(GPIOG,GPIO_Pin_1 );
	
	}
}

void Task_2( void * pvParameters)
{
	while(1)
	{
	vTaskDelay(100);
	GPIO_ResetBits(GPIOG,GPIO_Pin_8 );
	vTaskDelay(100);
	GPIO_SetBits(GPIOG,GPIO_Pin_8 );
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值