stm32 cubemax freeRTOS 学习:任务的创建和删除

stm32 任务创建

一、freeRTOS 原生任务创建

1.任务初始化参数配置:

#define TASK1_PRIO      2                   /* 任务优先级 */
#define TASK1_STK_SIZE  128                 /* 任务堆栈大小 */
TaskHandle_t            Task1Task_Handler;  /* 任务句柄 */
void task1(void *pvParameters);             /* 任务函数 */

2.任务创建:

/* 创建任务1 */
  xTaskCreate((TaskFunction_t )task1,                 /* 任务函数 */
			  (const char*    )"task1",               /* 任务名称 */
			  (uint16_t       )TASK1_STK_SIZE,        /* 任务堆栈大小 */
			  (void*          )NULL,                  /* 传入给任务函数的参数 */
			  (UBaseType_t    )TASK1_PRIO,            /* 任务优先级*/
			  (TaskHandle_t*  )&Task1Task_Handler);   /* 任务句柄 */

3.任务执行函数创建:

void task1(void *pvParameters)
{
    while (1)
    {

    	vTaskDelay(1000);
		HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_5);
		vTaskDelay(1000);
    }
}

4.开启任务调度

vTaskStartScheduler();

建议:开始任务调度前先把所有任务初始化完成

二、stm32cubeMax 任务创建

注意:在代码块注释 begin 与 end 之间的代码,生成代码时不会被删除,其他区域的自己写的代码会被删除。

1.初始化任务调度(在main 里面执行)

osKernelInitialize();

2.任务参数初始化(下面封装在 rtos 初始化函数里面执行)

//任务块创建
osThreadId_t defaultTaskHandle;
//任务参数配置 名字、大小、优先级
const osThreadAttr_t defaultTask_attributes = {
  .name = "defaultTask",
  .stack_size = 128 * 4,
  .priority = (osPriority_t) osPriorityNormal,
};

3.任务创建

//参数 (任务执行函数、任务参数、任务句柄)
  defaultTaskHandle = osThreadNew(StartDefaultTask, 
								  NULL, 
								  &defaultTask_attributes)

4.任务函数创建

void StartDefaultTask(void *argument)
{
  /* USER CODE BEGIN StartDefaultTask */
  /* Infinite loop */
  for(;;)
  {
  	//延时 1 秒
	  osDelay(1000);
	  HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_5);
  }
  /* USER CODE END StartDefaultTask */
}

5.开启任务调度(在 mian 里面执行)

//直接执行函数
osKernelStart();

注意: 特别需要注意的是RTOS正常工作时 osKernelStart 是无限循环的,不停的在此处对各个任务进行调度,通常写在这后面的所有操作都不会被执行,如果执行那说明系统运行出错了。

三、freeRTOS 原生任务删除

//任务参数是 (任务句柄)
vTaskDelete(Task1Task_Handler); /* 删除任务*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值