当前位置: 首页 > news >正文

FreeRTOS-在队列发送读取数据小实验

实验目的

创建一个队列,按下 KEY1 向队列发送数据,按下 KEY2 向队列读取数据。

实验代码:

void StarTaskSend(void const * argument)
{
  /* USER CODE BEGIN StarTaskSend */
    uint16_t buf = 100;
    BaseType_t status;
  /* Infinite loop */
  for(;;)
  {
      if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET) //判断PA0这个引脚是不是低电平,表示按键1被按下
      {
          osDelay(20);
          if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET)//消抖操作
          {
              status = xQueueSend(myQueueHandle,&buf,0);
              if(status == pdTRUE)//判断status中是否有值,有值代表写入成功
                 printf("写入队列成功,写入值%d\r\n",buf);
              else
                  printf("写入队列失败\r\n");
              
          }
          while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == GPIO_PIN_RESET);//当检测到按键1有上升沿的时候退出循环
      }
    osDelay(10);
  }
  /* USER CODE END StarTaskSend */
}

/* USER CODE BEGIN Header_StartTaskReceive */
/**
* @brief Function implementing the taskReceive thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTaskReceive */
void StartTaskReceive(void const * argument)
{
  /* USER CODE BEGIN StartTaskReceive */
    uint16_t buf ;
    BaseType_t status;
  /* Infinite loop */
  for(;;)
  {
    if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1) == GPIO_PIN_RESET) //判断PA0这个引脚是不是低电平,表示按键1被按下
      {
          osDelay(20);
          if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1) == GPIO_PIN_RESET)//消抖操作
          {
              status = xQueueReceive(myQueueHandle,&buf,0);
              if(status == pdTRUE)//判断status中是否有值,有值
                 printf("读入队列成功,读入值:%d\r\n",buf);
              else
                  printf("读入队列失败\r\n");
              
          }
          while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_1) == GPIO_PIN_RESET);//当检测到按键1有上升沿的时候退出循环
      }
    osDelay(10);
  }
  /* USER CODE END StartTaskReceive */
}

实验结果:

结果分析:因为写入了两次100,所以可以读出两次100,在读第三次的时候,就会显示读取失败,同样的,输入16个数据之后,就会写入不进去,因为定义的队列是16大小的,必须要读出之后,才能写入。

http://www.dtcms.com/a/41252.html

相关文章:

  • C++初阶—list类
  • RISC-V架构的平台级中断控制器(PLIC:platform-level interrupt controller)详解
  • visual studio 2022安装教程及下载(附安装包)visual studio 2022下载安装教程图文详情
  • 解决 Ubuntu 24.04 虚拟机内无法ping 通 Hostname 的问题
  • 【论文笔记-TPAMI 2024】FreqFusion:用于密集图像预测的频率感知特征融合
  • LLM中的Benchmark是什么
  • 阿里开源正式开园文生视频、图生视频模型-通义万相 WanX2.1
  • 浔川 AI 翻译 v6.1.1 将于 3 月 2 日上线:功能升级,体验更优
  • 【文献阅读】A Survey on Model Compression for Large Language Models
  • km98. 所有可达路径(邻接矩阵+邻接表)
  • 【02】Cocos游戏开发引擎从0开发一款游戏-cocos项目目录结构熟悉-调试运行项目-最重要的assets资源文件认识-场景sense了解-优雅草卓伊凡
  • 953 验证外星语词典
  • Qt关于平滑滚动的使用QScroller及QScrollerProperties类说明
  • 228页PPT丨制造业核心业务流程优化咨询全案(战略营销计划生产研发质量),附核心系统集成架构技术支撑体系,2月26日资料已更新
  • 【博资考1】网安学院-北航网安数学基础部分
  • Tomcat介绍
  • 13、虚函数和纯虚函数的区别【高频】
  • vscode+vue前端开发环境配置
  • YOLOv11-ultralytics-8.3.67部分代码阅读笔记-model.py
  • C++ 二分法中向下取整与向上取整的区别与应用场景详解
  • DeepSeek在赋能客户服务方面,3大业务场景落地
  • 【cuda学习日记】5.2 共享内存数据分布
  • 哔哩哔哩IT私塾python爬虫视频教程中的项目文件
  • python绘制cox列线图及绘制指南
  • Halcon 学习之路 set_grayval 算子
  • c++stl——容器
  • C++Qt学习笔记——实现一个串口通信界面
  • Debian安装C语言环境
  • DeepSeek开源:FlashMLA深度解析:Hopper架构上的大模型推理革命
  • 重大更新!锂电池剩余寿命预测新增 CALCE 数据集