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

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

[复制链接]
BinWin 发布时间:2018-4-20 22:22
本帖最后由 wangdbff 于 2018-4-20 22:25 编辑 ) m: H4 }; T: r$ G' K7 J

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

1 a7 A. i, `5 L  j     本次实验依旧是创建三个任务,包含两个队列任务和一个LED闪烁任务。其实保留这个点灯任务也可以当作状态指示,表明系统运行。任务如下, m4 A2 F( W8 Z" x6 p6 J
  1. xTaskCreate( vAppStartTask, "Start", configMINIMAL_STACK_SIZE, NULL, Start_TASK_PRIORITY, ( TaskHandle_t * ) NULL ); //点灯任务* `! c. A/ b0 \# n! _
复制代码
  1. xTaskCreate( vAppQueueProducer, "QProducer", blckqSTACK_SIZE, ( void * ) NULL, BLOCK_Q_P_PRIORITY, NULL );  //入队任务8 g9 b/ O+ Y# i( w) D" t$ D7 e; K
复制代码
  1. xTaskCreate( vAppQueueConsumer, "QConsumer", blckqSTACK_SIZE, ( void * ) NULL, BLOCK_Q_C_PRIORITY, NULL ); //读取队列
    - o9 }! D' m8 V  V- L7 a3 Q
复制代码
       具体任务代码如下8 W! ]& i; G% M2 b' a1 C* d9 G
         S0GI_`{[SNT$%0GV{]%K%P9.png        H1 M* |: v# i& s0 X$ R0 ^
       T2R2Z(XQRQ@}DJ9O]PB%J06.png
' t$ d/ Y1 n2 b      使用IAR可以在调试状态下查看实时状态,如下状态
" X! g& j) b7 |9 Q# E- Q- q3 V         TWVZ[@7(IJXBG3GUY3X`~16.png * B: }; W+ n* j8 A
      任务一扮演生产者的角色,任务1不断地向队列中填充内容,填充完之后该变量累加;任务2扮演消费者的角色,任务2不断的从队列中提取内容,并通过串口打印,这样就实现了实验的过程,验证了队列在任务间通信的作用。
; S7 l0 {: {$ ?8 M0 N! y) c
# G  s& [4 |. @5 S% _. [" \   
  U: {* c7 b# G5 E5 Y( E7 I
收藏 评论0 发布时间:2018-4-20 22:22

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版