你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

RTOS超低功耗平台应用---队列的应用

[复制链接]
BinWin 发布时间:2018-4-20 22:22
本帖最后由 wangdbff 于 2018-4-20 22:25 编辑

     首先要认识一下队列,     队列是主要的任务间通讯方式。可以在任务与任务间、中断和任务间传送信息。大多数情况下,队列用于具有线程保护的FIFO(先进先出)缓冲区:新数据放在队列的后面。当然,数据也可以放在队列的前面。对于FreeRTOS来说可以直接把C变量传送到队列,而且队列是通过拷贝传递数据的,并不妨碍队列通过引用来传递数据。单个队列可以传送来自不同类型不同位置的信息。最重要的,队列内存区域分配是由内核完成的。

     本次实验依旧是创建三个任务,包含两个队列任务和一个LED闪烁任务。其实保留这个点灯任务也可以当作状态指示,表明系统运行。任务如下
  1. xTaskCreate( vAppStartTask, "Start", configMINIMAL_STACK_SIZE, NULL, Start_TASK_PRIORITY, ( TaskHandle_t * ) NULL ); //点灯任务
复制代码
  1. xTaskCreate( vAppQueueProducer, "QProducer", blckqSTACK_SIZE, ( void * ) NULL, BLOCK_Q_P_PRIORITY, NULL );  //入队任务
复制代码
  1. xTaskCreate( vAppQueueConsumer, "QConsumer", blckqSTACK_SIZE, ( void * ) NULL, BLOCK_Q_C_PRIORITY, NULL ); //读取队列
复制代码
       具体任务代码如下
         S0GI_`{[SNT$%0GV{]%K%P9.png      
       T2R2Z(XQRQ@}DJ9O]PB%J06.png
      使用IAR可以在调试状态下查看实时状态,如下状态
         TWVZ[@7(IJXBG3GUY3X`~16.png
      任务一扮演生产者的角色,任务1不断地向队列中填充内容,填充完之后该变量累加;任务2扮演消费者的角色,任务2不断的从队列中提取内容,并通过串口打印,这样就实现了实验的过程,验证了队列在任务间通信的作用。

   
收藏 评论0 发布时间:2018-4-20 22:22

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版