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

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

[复制链接]
STMCU小助手 发布时间:2022-3-9 10:10
任务通知优缺点: ( h, ?3 t4 ?% S% }9 ^2 o5 f
6 C' Z- R0 I* l/ {+ g5 p
优点:可以提高响应速度并减少RAM使用。9 n4 f( g- D: B6 C  Q/ j! @& w# y  @
缺点: 1、任务通知只能有一个接收任务 2、接收任务可以因为接收任务通知进入阻塞态,而发送任务不会因为发送失败进入阻塞态- S( u) C$ P* p+ h9 J; T& P
5 {* Q- Y3 [0 g4 @! r) g
一般使用步骤是:
! C* L, o) O0 W: P$ n! T1、发送任务通知% S4 ]5 U9 R, x
2、获取任务通知

3 o+ C2 z3 w+ v/ m5 ]1 U' S
2 g, G/ d! D/ V4 e- D第1步:发送任务通知
4 M' ^- Q% F1 ~4 F3 `
  1. BaseType_t err=xTaskNotify((TaskHandle_t)Keyprocess_Handler,
    ; b. {! K1 [. l. }' l
  2.                                                          //接收任务通知任务句柄( o9 [: g) I3 k5 B' @  [; L
  3.                                                         (uint32_t                )key,        . N- g0 c; U' S# x; t1 H( @
  4.                                                         //任务通知值                                       
    $ ?' ^! s+ Q/ I- v! x0 d
  5.                                                         (eNotifyAction        )eSetValueWithOverwrite);                                        ' {) r5 i, ^' L
  6.                                                         //覆写的方式发送任务通知( I+ k# U/ |  V# W5 b" B2 c
  7. if(err==pdFAIL)! ^& a1 n. S- t  f1 z! m
  8. {
    ' ~4 U  |& }6 r
  9.         printf("任务通知发送失败\r\n");- n3 @' D8 }# x$ T6 j. t5 `( B
  10. }
复制代码

" Z  W4 ]- G7 f第2步:接收任务通知/ D$ G" T" p: @* n
: p) l6 s( ]9 f6 ~1 ^
  1. BaseType_t  err=xTaskNotifyWait((uint32_t        )0x00,        
    + z, c; s$ {8 s* }+ F: p
  2.                                                         //进入函数的时候不清除任务bit: q& E+ b( A+ `* g
  3.                                                         (uint32_t        )ULONG_MAX,                " S  x$ n3 f3 d' R6 r9 m
  4.                                                         //退出函数的时候清除所有的bit! U2 U' n; c1 G
  5.                                                         (uint32_t*        )&NotifyValue,        / y- Y0 L' G+ n  m$ H
  6.                                                         //保存任务通知值# N1 I7 C1 r5 T6 g7 q
  7.                                                         (TickType_t        )portMAX_DELAY);; r+ \( `3 u. V1 s6 R# W
  8.                                                         //阻塞时间
    : |; I7 i0 ?( _5 |3 h6 l$ p
  9.                                                                
    * z. O0 C" n3 J2 G# D
  10. if(err==pdTRUE)//获取任务通知成功
    , j. v6 e8 F4 v7 S& s$ X  r; t
  11. {
    $ {. [0 I1 g, }! ?; e! L
  12.                 swtich((u8)NotifyValue)
    + r( u( _; a" X& F
  13.                 {' \9 s( g/ r" |
  14.                         case x:...
    ) r8 G) p/ e  M/ h+ _+ {/ U
  15.                         //user code, d( R4 ?6 |2 d8 g# u* a
  16.                         .....# Q: i) E3 Y( g6 e" G" K+ A/ N" p
  17.                         ) o/ r  q- `7 ]& F8 L
  18.                 }
    4 I1 w; J" ?+ U" i: L4 t0 G6 @
  19. }$ a. U- P" A8 b) Q2 p2 X# `
复制代码

2 P0 x0 J' e# m3 @  H" @$ y总结
  V) K# ~  A* i  p. [8 T, q& b以上是任务通知模拟邮箱的常规用法。
5 _$ @, |7 C$ S" }& |- ]
+ P4 Q% E6 G3 H$ J4 F5 o8 N, \: N) M* B2 o
& {1 T& s+ U1 `+ }
( W1 p+ J. N' p
赞 收藏 评论0 发布时间:2022-3-9 10:10

举报

0个回答

所属标签

相似技术帖

官网相关资源

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