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

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

[复制链接]
BinWin 发布时间:2018-4-20 22:22
本帖最后由 wangdbff 于 2018-4-20 22:25 编辑 " V- V" S- o. T9 m, p
, ^; A. q2 F9 N$ j
     首先要认识一下队列,     队列是主要的任务间通讯方式。可以在任务与任务间、中断和任务间传送信息。大多数情况下,队列用于具有线程保护的FIFO(先进先出)缓冲区:新数据放在队列的后面。当然,数据也可以放在队列的前面。对于FreeRTOS来说可以直接把C变量传送到队列,而且队列是通过拷贝传递数据的,并不妨碍队列通过引用来传递数据。单个队列可以传送来自不同类型不同位置的信息。最重要的,队列内存区域分配是由内核完成的。* {  C: Q3 P- h( Z$ p5 l

9 G& a1 h/ u! P4 ?0 u: s     本次实验依旧是创建三个任务,包含两个队列任务和一个LED闪烁任务。其实保留这个点灯任务也可以当作状态指示,表明系统运行。任务如下/ y3 ]0 I( L2 @6 n7 W
  1. xTaskCreate( vAppStartTask, "Start", configMINIMAL_STACK_SIZE, NULL, Start_TASK_PRIORITY, ( TaskHandle_t * ) NULL ); //点灯任务& E- r- _5 s8 ?! x- }
复制代码
  1. xTaskCreate( vAppQueueProducer, "QProducer", blckqSTACK_SIZE, ( void * ) NULL, BLOCK_Q_P_PRIORITY, NULL );  //入队任务
    1 @9 q3 Z  ?; Y  ?4 q7 s7 R2 H! ^6 E; S
复制代码
  1. xTaskCreate( vAppQueueConsumer, "QConsumer", blckqSTACK_SIZE, ( void * ) NULL, BLOCK_Q_C_PRIORITY, NULL ); //读取队列
      h% ?* {- k' \" g3 q/ {! }  x- r
复制代码
       具体任务代码如下- q$ K1 d; T5 @5 S
         S0GI_`{[SNT$%0GV{]%K%P9.png      
5 l2 T+ s; `' J6 z  i" p       T2R2Z(XQRQ@}DJ9O]PB%J06.png 5 ?. W) @( \& b% Z' [. A
      使用IAR可以在调试状态下查看实时状态,如下状态+ j7 T0 J3 A! q7 F0 G6 e- v
         TWVZ[@7(IJXBG3GUY3X`~16.png ( H, N/ V3 r& i, f/ F
      任务一扮演生产者的角色,任务1不断地向队列中填充内容,填充完之后该变量累加;任务2扮演消费者的角色,任务2不断的从队列中提取内容,并通过串口打印,这样就实现了实验的过程,验证了队列在任务间通信的作用。8 Q( }) |+ ~  ~8 R! v

  `$ L1 R  @$ @/ _( Y    9 \5 U$ K7 Z+ t4 H
收藏 评论0 发布时间:2018-4-20 22:22

举报

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