基于STM32的FreeRTOS实时操作系统2

本教程是关于任务的相关的一些操作。这些包括创建任务,在任务之间切换,挂起和恢复任务,终止任务。
其余操作和上一篇都差不多,其设置的界面如下:
在这里插入图片描述
在这里插入图片描述

  • 这是我添加完任务后,生成的代码:
    在这里插入图片描述

接下来我们重写函数,使用STM32CUBEIDE的ITM作为调试工具来使用,函数部分如下:

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
int _write(int file, char *ptr,int len)
{
	int i=0;
	for(i=0;i<len;i++)
		ITM_SendChar((*ptr++));
    return len;
}
/* USER CODE END 0 */

下载程序后的界面如下图所示:
在这里插入图片描述关于任务的优先级如下设定以及其会出现的结果:
代码如下:

void StartDefaultTask(void const * argument)
{
  /* USER CODE BEGIN StartDefaultTask */
  /* Infinite loop */
  for(;;)
  {
	printf("StartDefaultTask!!\n\r");
    osDelay(1000);
  }
  /* USER CODE END StartDefaultTask */
}

/* USER CODE BEGIN Header_MyTask01_Init */
/**
* @brief Function implementing the MyTask01 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_MyTask01_Init */
void MyTask01_Init(void const * argument)
{
  /* USER CODE BEGIN MyTask01_Init */
  /* Infinite loop */
  for(;;)
  {
	printf("MyTask01  a=%d \n\r",a++);
    osDelay(2000);
  }
  /* USER CODE END MyTask01_Init */
}

在这里插入图片描述

  • 当内核控制时,它将创建2个任务,一个是Default Task,另一个是Task2。

  • 现在内核有2个任务要运行,因此它将选择优先级较高的任务,即Task2。将执行printf语句,并且任务将进入阻止模式 2秒钟。此后,内核将立即运行默认任务。再次运行printf语句后,默认任务将进入阻止状态1秒钟。一秒钟没有任何运行。

  • 1秒后,默认任务将准备就绪并运行。它将打印,并进入阻塞状态1秒钟。 一秒钟后,默认任务将再次唤醒,任务2也将退出阻止模式,因为距离Task2进入阻止模式已有2秒钟了。内核再次运行2个任务,因此它将运行优先级更高的任务,即Task2首先。

  • 此循环将以相同顺序继续。

一下介绍任务暂停和开启的函数:
其函数名为:

void MyTask01_Init(void const * argument)
{
  /* USER CODE BEGIN MyTask01_Init */
  /* Infinite loop */
  for(;;)
  {
	printf("MyTask01  a=%d \n\r",a++);
    osDelay(2000);
    if(a == 5)
    {
    	printf("defaultTaskHandle  will stop!");
    	osThreadSuspend(defaultTaskHandle);   //任务暂停
    }
    if(a == 8)
    {
    	printf("defaultTaskHandle will start");
    	osThreadResume(defaultTaskHandle);  //开启任务
    }

    if(a == 10)
    {
    	printf("Terminating  defaultTaskHandle");
    	osThreadTerminate(defaultTaskHandle);  //任务终止
    }

    if(a == 12)
    {
    	uint32_t PreviousWakeTime = osKernelSysTick();
    	osDelayUntil(&PreviousWakeTime, 3000); // 将任务延长至指定时间
    }
  }

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值