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

【经验分享】STM32之FreeRTOS(九):任务通知模拟消息邮箱

[复制链接]
STMCU小助手 发布时间:2022-3-9 10:10
任务通知优缺点:
0 a! [+ T7 b& @" n- m
* A+ c1 Q8 C% H  m1 ?
优点:可以提高响应速度并减少RAM使用。
/ f4 m; r9 u: A, X( U1 I缺点: 1、任务通知只能有一个接收任务 2、接收任务可以因为接收任务通知进入阻塞态,而发送任务不会因为发送失败进入阻塞态
3 q/ i4 p( i0 e6 `8 y0 @
5 |4 y# w5 g3 x8 w一般使用步骤是:
& \* g, e  C/ M/ c, ~6 Q! w4 h( G% \1、发送任务通知1 j- h3 @5 T% O. T2 @4 \) q
2、获取任务通知
  q7 f% T6 r: _% |6 K$ k& M
. b  d. ?; }$ c+ E2 j9 L2 p
第1步:发送任务通知
2 \% M/ @. G4 q5 }5 b2 s8 t9 x
  1. BaseType_t err=xTaskNotify((TaskHandle_t)Keyprocess_Handler,7 C4 I1 A9 @! O
  2.                                                          //接收任务通知任务句柄  N6 H+ I& L! [2 h5 u
  3.                                                         (uint32_t                )key,        
    + N) f# X+ ?) Y9 k/ G+ \
  4.                                                         //任务通知值                                        3 k. b" B) s& g. D/ @) V
  5.                                                         (eNotifyAction        )eSetValueWithOverwrite);                                       
    # q  e/ w4 N6 O, Y- u  ~
  6.                                                         //覆写的方式发送任务通知
    6 M% g/ G9 J$ \$ ?7 e  z' F
  7. if(err==pdFAIL)
    * {  O: X9 d5 Y  i/ m  O
  8. {1 k: S1 t& n1 l7 @  ?$ Z" F1 ~
  9.         printf("任务通知发送失败\r\n");3 i6 b% u) M* }6 w7 R- V/ u/ o6 N
  10. }
复制代码
  n4 J+ K" k8 H: B9 ?
第2步:接收任务通知
9 C) O4 l: X2 X* q2 a: c8 n& o# P* o, x
  1. BaseType_t  err=xTaskNotifyWait((uint32_t        )0x00,        
    5 C( D" g! C" [1 ?
  2.                                                         //进入函数的时候不清除任务bit4 h: X# ]) X  |3 N/ d1 i8 ?
  3.                                                         (uint32_t        )ULONG_MAX,                ; E& G* ]5 g7 _3 N# A
  4.                                                         //退出函数的时候清除所有的bit  o; K  b' y7 r  S3 u- i
  5.                                                         (uint32_t*        )&NotifyValue,        
      v: W! z: S/ Z  h) i- s
  6.                                                         //保存任务通知值5 ?  p) F( c( F3 D
  7.                                                         (TickType_t        )portMAX_DELAY);* c; q+ M% G7 j) @, {: a  T; v
  8.                                                         //阻塞时间0 H6 k9 s3 m! P1 q! W$ r" ~8 y( u
  9.                                                                
    6 {2 M3 ]+ S1 D: E
  10. if(err==pdTRUE)//获取任务通知成功1 h# x2 W7 G* d& s
  11. {
    5 d& p2 f0 e+ m2 ^, A. w% M2 ?
  12.                 swtich((u8)NotifyValue)
    $ R7 n/ |& O- V/ C9 J& a/ H' E
  13.                 {" a0 O: t% R3 L7 T- x0 v
  14.                         case x:...6 ]5 a0 T: S; \  ^$ h" \
  15.                         //user code* L" s3 N) ?& {( s" C! j0 C9 @0 J  }( w
  16.                         .....
    " S* U) l( c* Q. O
  17.                         + ~! Q" R% Q2 M+ y2 }
  18.                 }, c) L, ]) h/ G# T" `9 m0 c% b. U- u
  19. }
    ( {% l4 t0 K( k* D0 c
复制代码
/ z1 j: ]8 }1 g- r8 f/ o
总结) {- m+ n+ Y4 m; e8 T0 G
以上是任务通知模拟邮箱的常规用法。' i* @# Q& n3 R2 [# F7 k  R
( A% Q' s  a  T4 }! M( Z
" {; h) O3 G1 T5 g  e: e

9 t/ X- h* Y$ h, `% T  S8 t0 @  J1 `: N
赞 收藏 评论0 发布时间:2022-3-9 10:10

举报

0个回答

所属标签

相似技术帖

官网相关资源

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