freertos学习之路 ,第一章,写一个简单的任务切换。

在freertos中创建静态任务的一般步骤

第一步 任务栈
第二步 写一个任务函数
第三步 任务控制块 tcb(控制块的英文名字)

动态创建任务的步骤,
任务句柄
static TaskHandle_t Task_Handle = NULL; 创建一个任务的任务句柄

接下来在主函数里面开启

 BaseType_t xReturn = pdPASS;  //d定义创建信息的返回值  默认为pdpas


  BSP_Init();  //外设的初始化
 
//定义 第一个的初始任务
  xReturn = xTaskCreate((TaskFunction_t )AppTaskCreate,  //任务入口函数
                        (const char*    )"AppTaskCreate",//任务名字
                        (uint16_t       )512, //任务栈大小
                        (void*          )NULL,//任务入口函数参数
                        (UBaseType_t    )1,//优先级      数字越大 优先级越高
                        (TaskHandle_t*  )&AppTaskCreate_Handle);//任务控制块 指针    ,任务句柄
 
  if(pdPASS == xReturn)
    vTaskStartScheduler();  //启动任务 开启调度器
  else
    return -1;  
  
  while(1); 

任务函数

static void AppTaskCreate(void)
{
  BaseType_t xReturn = pdPASS; //d定义创建信息的返回值  默认为pdpas
  
  taskENTER_CRITICAL();       //进入临界保护状态
  
xReturn = xTaskCreate((TaskFunction_t )LED1_Task, //任务入口函数
                        (const char*    )"LED1_Task",//任务名字
                        (uint16_t       )512,   //任务栈大小
                        (void*          )NULL,//任务入口函数参数
                        (UBaseType_t    )2,	    //优先级      数字越大 优先级越高
                        (TaskHandle_t*  )&LED1_Task_Handle);//任务控制块 指针    ,任务句柄
 
  if(pdPASS == xReturn)
   vTaskDelete(AppTaskCreate_Handle); //删除这个初始任务
  
  taskEXIT_CRITICAL();          //退出临界区
 

  

一般定义一个启动任务,然后在这个启动任务里面,开启其他任务,然后再把这个任务删除。

static void LED1_Task(void* parameter)
{	
    while (1)
    {
        LED1_ON;
        vTaskDelay(500);   /* ÑÓʱ500¸ötick */
        printf("LED1_Task Running,LED1_ON\r\n");
        
        LED1_OFF;     
        vTaskDelay(500);   /* ÑÓʱ500¸ötick */		 		
        printf("LED1_Task Running,LED1_OFF\r\n");
			//Key_Scan(LED1_GPIO_PORT,LED1_GPIO_PIN);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值