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

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

[复制链接]
BinWin 发布时间:2018-4-20 22:22
本帖最后由 wangdbff 于 2018-4-20 22:25 编辑
1 d* N" ~, @! a1 w! H, R) E8 `6 Z2 Z; J3 w9 I% D! w5 r* n! K
     首先要认识一下队列,     队列是主要的任务间通讯方式。可以在任务与任务间、中断和任务间传送信息。大多数情况下,队列用于具有线程保护的FIFO(先进先出)缓冲区:新数据放在队列的后面。当然,数据也可以放在队列的前面。对于FreeRTOS来说可以直接把C变量传送到队列,而且队列是通过拷贝传递数据的,并不妨碍队列通过引用来传递数据。单个队列可以传送来自不同类型不同位置的信息。最重要的,队列内存区域分配是由内核完成的。" _% Z# n6 W1 n4 g& _

! k( f* {6 r) u- q; u     本次实验依旧是创建三个任务,包含两个队列任务和一个LED闪烁任务。其实保留这个点灯任务也可以当作状态指示,表明系统运行。任务如下
" r! o# _8 g8 a* p9 P  B5 m9 `: a
  1. xTaskCreate( vAppStartTask, "Start", configMINIMAL_STACK_SIZE, NULL, Start_TASK_PRIORITY, ( TaskHandle_t * ) NULL ); //点灯任务$ l# d- g) d+ D& R6 }$ G
复制代码
  1. xTaskCreate( vAppQueueProducer, "QProducer", blckqSTACK_SIZE, ( void * ) NULL, BLOCK_Q_P_PRIORITY, NULL );  //入队任务- b( L% \! J7 M( r9 v
复制代码
  1. xTaskCreate( vAppQueueConsumer, "QConsumer", blckqSTACK_SIZE, ( void * ) NULL, BLOCK_Q_C_PRIORITY, NULL ); //读取队列# o( j2 D/ B/ G+ v% K
复制代码
       具体任务代码如下
% o5 P5 N* j8 q  D+ L7 z( H7 G, U         S0GI_`{[SNT$%0GV{]%K%P9.png      
" R4 b1 r% ]( C( \* a' H3 n. V       T2R2Z(XQRQ@}DJ9O]PB%J06.png 1 M: C  }1 `" M  M0 [) T
      使用IAR可以在调试状态下查看实时状态,如下状态
4 V* _7 z& K6 M$ E2 ~; E! k1 K5 K' [8 P         TWVZ[@7(IJXBG3GUY3X`~16.png - K* _1 r7 V, n, C9 z0 L
      任务一扮演生产者的角色,任务1不断地向队列中填充内容,填充完之后该变量累加;任务2扮演消费者的角色,任务2不断的从队列中提取内容,并通过串口打印,这样就实现了实验的过程,验证了队列在任务间通信的作用。3 |# @7 J. @3 K

6 o8 W$ \7 z2 O/ }; L5 ?% y' m* T   
; J1 e4 ^/ V, N  y
收藏 评论0 发布时间:2018-4-20 22:22

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版