当前位置: 首页 > 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大小的,必须要读出之后,才能写入。

相关文章:

  • 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++ 二分法中向下取整与向上取整的区别与应用场景详解
  • 烤肉店从泔水桶内捞出肉串再烤?西安未央区市监局:停业整顿
  • 中办、国办关于持续推进城市更新行动的意见
  • 牛市早报|4月新增社融1.16万亿,降准今日正式落地
  • 六连板成飞集成:航空零部件业务收入占比为1.74%,市场环境没有重大调整
  • 国务院办公厅印发《国务院2025年度立法工作计划》
  • 四部门:强化汛期农业防灾减灾,奋力夺取粮食和农业丰收