FreeRTOS创建和删除函数

API函数

在这里插入图片描述

任务创建和删除的本质是调用 api函数 

任务函数原型

创建任务的函数原型
在这里插入图片描述

注意

函数判断 if(XXXX== 1) XXXX就是宏  如果等于1  才能使用下面的动态函数 
必须  go to 查看 是否 xxxx==1

这是宏 置 1 的情况
在这里插入图片描述

代码

 
#define START_STK_SIZE 120  //任务堆栈大小
 
#define START_TASK_PRIO 1  //优先级
 
TaskHandle_t StartTask_Handler; //任务句柄
 
void start_task( void *pvParameters);//函数声明定义 
 
#define LED0_TASK_PRIO		2   //优先级
 
#define LED0_STK_SIZE 		50   //任务堆栈大小
 
TaskHandle_t LED0Task_Handler; //任务句柄
 
void led0_task(void *pvParameters);//函数声明定义 


#define TASK2_TASK_SIZE 50    //任务堆栈大小
 
#define TASK2_TASK_PRIO 3      //任务句柄
 
TaskHandle_t TASK2Task_handler;  //任务堆栈大小
 
 void task_task2( void *pvParameters );//函数声明定义 

   int  main(void)
{
		NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4) 

    delay_init();
	  LED_init();
   // 创建任务
    xTaskCreate((TaskFunction_t)     start_task, //任务函数
                (const char*)       "start_task", //任务名字
                (uint16_t )          START_STK_SIZE,   //堆栈大小
                ( void*)             NULL,            //堆栈函数值
                (UBaseType_t)       START_TASK_PRIO, //任务优先级
                (TaskHandle_t*)    &StartTask_Handler); //任务句柄 

      vTaskStartScheduler();  //开始任务调度        

  return 0;
} 
 
 //开始任务 
   void start_task( void *pvParameters )
  {
		// task1
		 
        xTaskCreate((TaskFunction_t)led0_task, //任务函数
                (const char*)       "led0_task",  //任务名字
                (uint16_t)          LED0_STK_SIZE,    //堆栈大小
                ( void*)            NULL,               //堆栈函数值
                (UBaseType_t)       LED0_TASK_PRIO,//任务优先级
                (TaskHandle_t*)    &LED0Task_Handler); //任务句柄 
		//task2
		xTaskCreate ((TaskFunction_t) task_task2,   //任务函数
                ( const char*)       "task_task2",  //任务名字
                (uint16_t )          TASK2_TASK_SIZE,  //堆栈大小
                ( void *)            NULL,              //堆栈函数值
                (UBaseType_t)        TASK2_TASK_PRIO,  //任务优先级
                (TaskHandle_t*)      &TASK2Task_handler );	 //任务句柄 			
          vTaskDelete(StartTask_Handler);//删除 任务句柄 

堆栈大小

 保存现场cpu的值 (寄存器的值 )
 注意 宏定义的值 不是 堆栈大小的值   这里只是 一个字节的值 因为默认 int 类型  (4个字节)
 所以要 #define xxx  xx    xx 实际的值是 4 *(xx)堆栈大小

任务优先级

 0-n 0 最大 依次减少

任务句柄

任务句柄类似 一个 函数的入口地址  函数返回了这个地址 就开始从这个地址 开始 工作。

怎么实现最简单的灯闪烁呢

void led0_task( void *pvParameters )
{
      while(1)
    {
	   LED0 =~LED0;
       vTaskDelay(500);
    } 
}

void task_task2( void *pvParameters )
{ 
    while(1)
   {
	    LED1 =~LED1;
       vTaskDelay(500);
   }
}
		 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值