STM32CubeIDE+FreeRTOS消息队列实验

摘要:
SendTask先等待2秒发送消息1,再等待3秒发送消息2。ReceiveTask为获取消息队列内容,如果获取成功,将获取的信息打印出来。看输出信息,当第3秒时,ReceiveTask接收到消息1,第5秒时,ReceiveTask接收到消息2.实现了任务间通过消息队列进行通信。

新建工程RTOS_Message,配置如下:

STM32CubeIDE+FreeRTOS消息队列实验第1张STM32CubeIDE+FreeRTOS消息队列实验第2张

Ctrl + S生成代码

修改代码,

1,在main.h中添加

//添加include/*Private includes ----------------------------------------------------------*/
/*USER CODE BEGIN Includes */#include "stdio.h"
/*USER CODE END Includes */

2,在main.c中添加

//添加_write函数重定义/*USER CODE BEGIN PFP */
int _write(int file , char *ptr,intlen)
{
    int i = 0;
    for(i = 0;i<len;i++)
        ITM_SendChar((*ptr++));
    returnlen;
}
/*USER CODE END PFP */...
...
...
/*USER CODE BEGIN 2 */printf("starting...
");
/*USER CODE END 2 */

3,在main.c中修改3个任务入口函数的内容

/*USER CODE BEGIN Header_StartDefaultTask */
/**
  * @brief  Function implementing the defaultTask thread.
  * @param  argument: Not used 
  * @retval None
  */
/*USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void const *argument)
{
  /*USER CODE BEGIN 5 */
    int timeCount = 0;
  /*Infinite loop */
  for(;;)
  {
    printf("DefaultTask----time   %d
",timeCount++);
    osDelay(1000);
  }
  /*USER CODE END 5 */}
/*USER CODE BEGIN Header_StartSendTask */
/**
* @brief Function implementing the sendTask thread.
* @param argument: Not used
* @retval None
*/
/*USER CODE END Header_StartSendTask */
void StartSendTask(void const *argument)
{
  /*USER CODE BEGIN StartSendTask */
  /*Infinite loop */
  for(;;)
  {
    osDelay(2000);//等待2秒
    osMessagePut(myQueue01Handle, 1, 0);//发送消息1
    osDelay(3000);//等待3秒
    osMessagePut(myQueue01Handle, 2, 0);//发送消息2
}
  /*USER CODE END StartSendTask */}
/*USER CODE BEGIN Header_StartReceiveTask */
/**
* @brief Function implementing the receiveTask thread.
* @param argument: Not used
* @retval None
*/
/*USER CODE END Header_StartReceiveTask */
void StartReceiveTask(void const *argument)
{
  /*USER CODE BEGIN StartReceiveTask */osEvent theEvent;//声明一个事件
  /*Infinite loop */
  for(;;)
  {
    //获取消息,如果没有消息就一直等待
      theEvent =osMessageGet(myQueue01Handle, osWaitForever);
      if(theEvent.status ==osEventMessage)
      {
          printf("Receive message %ld
",theEvent.value.v);
      }
  }
  /*USER CODE END StartReceiveTask */}

修改完毕后点击 小锤子 构建工程,然后点击Debug,按如下步骤配置ITM调试

STM32CubeIDE+FreeRTOS消息队列实验第3张

STM32CubeIDE+FreeRTOS消息队列实验第4张

STM32CubeIDE+FreeRTOS消息队列实验第5张

全速运行之前一定要先点击SWV ITM data Console 页面中的红色圆圈

STM32CubeIDE+FreeRTOS消息队列实验第6张

现象:

STM32CubeIDE+FreeRTOS消息队列实验第7张

分析:

DefaultTask 负责每秒输出一个当前的时间信息,表示此时时间为第几秒。

SendTask先等待2秒发送消息1,再等待3秒发送消息2。

ReceiveTask为获取消息队列内容,如果获取成功,将获取的信息打印出来。

看输出信息,当第3秒时,ReceiveTask接收到消息1,第5秒时,ReceiveTask接收到消息2.

实现了任务间通过消息队列进行通信。

免责声明:文章转载自《STM32CubeIDE+FreeRTOS消息队列实验》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java spring cloud gateway GlobalFilter通过feign调用其他服务ThinkPHP3.2.3框架下where的组合查询and、or方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

消息机制、子窗口和父窗口的消息传递

1. 什么是窗口 MSDN: In a graphical Win32-based application, a window is a rectangular area of the screen where the application displays output and receives input from the user. Theref...

消息处理(MSMQ)基础知识

     MSMQ(MicroSoft Message Queue,微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位置。它的实现原理是:消息的发送者把自己想要发送的信息放入一个容器中(我们称之为Message),然后把它保存至一个系统公用空间的消息队列(Messa...

C/C++迭代器使用具体解释

迭代器是一种检查容器内元素并遍历元素的数据类型。能够替代下标訪问vector对象的元素。 每种容器类型都定义了自己的迭代器类型,如 vector: vector<int>::iterator iter;这符语句定义了一个名为 iter 的变量。它的数据类型是 vector<int> 定义的 iterator 类型。每一个标准库容器...

rabbitmq队列

使用MQ 以常见的订单系统为例,用户点击【下单】按钮之后的业务逻辑可能包括:扣减库存、生成相应单据、发红包、发短信通知。在业务发展初期这些逻辑可能放在一起同步执行,随着业务的发展订单量增长,需要提升系统服务的性能,这时可以将一些不需要立即生效的操作拆分出来异步执行,比如发放红包、发短信通知等。这种场景下就可以用 MQ ,在下单的主流程(比如扣减库存、生成相...

一.windows环境下rabbitMQ的的安装和配置

  rabbitMQ是AMQP 0-9-1(高级消息队列协议)的一个实现,使用Erlang语言编写,利用了Erlang的分布式特性。用它来实现分布式消息队列。   1.因为是用Erlang编写的,所以首先要安装 Eralng OTP For Windows,到官网去下载,http://www.erlang.org/ ,进入下载页,看到如下一些版本。   ...

RabbitMQ(二):Java 操作队列

1. 简单模式 模型: P:消息的生产者 队列:rabbitmq C:消息的消费者 获取 MQ 连接 public static Connection getConnection() throws IOException, TimeoutException { // 定义一个连接工厂 ConnectionFactory...