14547|3

266

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

Freertos学习笔记:通过队列任务间通信 [复制链接]

       先解释一下队列:是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。队列的操作方式和堆栈类似,唯一的区别在于队列只允许新数据在后端进行添加。
     FreeRTOS中信号量与互斥琐的底层都是通过队列来实现的!
在嵌入式操作系统中队列是任务间数据交换的常用手段,队列是生产者消费者模型的重要组成部分。FreeRTOS的队列简单易用,下面结合一个具体例子说明FreeRTOS中的队列如何使用。

参考代码中存在两个任务,任务Task3 和任务task 4。任务Task4 扮演生产者的角色,任务Task4每隔1S向队列中填充内容,填充的内容为4个int8_t类型的变量,填充完之后该变量累加;任务Task 3 扮演消费者的角色,任务Task3 不断的从队列中提取内容,并通过串口打印.

  1. /*
  2. *********************************************************************************************************
  3. *        函 数 名: vTask3
  4. *        功能说明: 接收队列信息               
  5. *        形    参:pvParameters 是在创建该任务时传递的形参
  6. *        返 回 值: 无
  7. *********************************************************************************************************
  8. */
  9. void vTask3( void *pvParameters )
  10. {
  11.    uint8_t Count[5];
  12.     while(1)
  13.     {
  14.                                
  15.         /* 从队列中获取内容 */     
  16.         xQueueReceive( xQueue, &Count[0], portMAX_DELAY); //任务中断并等待队列中可用空间的最大时间
  17.         xQueueReceive( xQueue, &Count[1], portMAX_DELAY);
  18.         xQueueReceive( xQueue, &Count[2], portMAX_DELAY);
  19.         xQueueReceive( xQueue, &Count[3], portMAX_DELAY);
  20.         xQueueReceive( xQueue, &Count[4], portMAX_DELAY);
  21.        
  22.         printf("Count0 =  %d\r\n", Count[0]);
  23.         printf("Count1 =  %d\r\n", Count[1]);
  24.         printf("Count2 =  %d\r\n", Count[2]);
  25.         printf("Count3 =  %d\r\n", Count[3]);
  26.         printf("Count4 =  %d\r\n", Count[4]);
  27.     }
  28. }

  29. /*
  30. *********************************************************************************************************
  31. *        函 数 名: vTask4
  32. *        功能说明: 向队列中填充内容       
  33. *        形    参:pvParameters 是在创建该任务时传递的形参
  34. *        返 回 值: 无
  35. *********************************************************************************************************
  36. */
  37. void vTask4( void *pvParameters )
  38. {
  39.     portTickType xLastWakeTime;
  40.     const portTickType xFrequency = 1000;
  41.     uint8_t ucVar[5] = {0};

  42.          // Initialise the xLastWakeTime variable with the current time.
  43.      xLastWakeTime = xTaskGetTickCount();

  44.     while(1)
  45.     {
  46.                 ucVar[0]++;
  47.                 ucVar[1]++;
  48.                 ucVar[2]++;
  49.                 ucVar[3]++;
  50.                 ucVar[4]++;
  51.                
  52.                 if( xQueue ) //!=NULL 如果队列创建成功
  53.                 {

  54.                         //当队列满时,则等待 xTicksToWait个滴答周期后再传递
  55.                         xQueueSend( xQueue, ( void * ) &ucVar[0], ( portTickType ) 10 );
  56.                         xQueueSend( xQueue, ( void * ) &ucVar[1], ( portTickType ) 10 );
  57.                         xQueueSend( xQueue, ( void * ) &ucVar[2], ( portTickType ) 10 );
  58.                         xQueueSend( xQueue, ( void * ) &ucVar[3], ( portTickType ) 10 );
  59.                         xQueueSend( xQueue, ( void * ) &ucVar[4], ( portTickType ) 10 );
  60.                 }
  61.         vTaskDelayUntil( &xLastWakeTime, xFrequency );
  62.     }
  63. }
复制代码



最新回复

cool  详情 回复 发表于 2015-5-8 21:32
点赞 关注
个人签名

gitee/casy

 
 

回复
举报

266

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
实验结果:
 
个人签名

gitee/casy

 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

板凳
 
不错,我也要搞搞OS玩玩
 
 
 

回复

26

帖子

0

TA的资源

一粒金砂(中级)

4
 
cool
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
Microchip 直播|利用motorBench开发套件高效开发电机磁场定向控制方案 报名中!
直播主题:利用motorBench开发套件高效开发电机磁场定向控制方案
直播时间:2025年3月25日(星期二)上午10:30-11:30
快来报名!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表