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

【经验分享】STM32之FreeRTOS(七):任务通知模拟二值信号量

[复制链接]
STMCU小助手 发布时间:2022-3-9 10:26
任务通知模拟二值信号量,实际与二值信号量的发送与获取十分类似,只是将二值信号量的发送与获取换成任务通知的发送与获取。
, h0 D- V2 K  d; O
+ z$ _8 i- ], n5 w/ X任务通知优缺点: / X( y- R+ w+ F9 ?9 i. D0 P5 f  z, D
优点:可以提高响应速度并减少RAM使用。
5 ?- Z" g) k7 r6 b缺点: 1、任务通知只能有一个接收任务 2、接收任务可以因为接收任务通知进入阻塞态,而发送任务不会因为发送失败进入阻塞态- a2 r) x: [* P
! j+ a. n- k# C! D' W

' S4 A; F4 x, t* g& S一般使用步骤是:+ |* J8 d0 n+ s
1、发送任务通知
3 P/ N6 p- @  J; y( d. d) q, C2、获取任务通知

6 s& q, W( K5 f+ x
8 @4 M1 M. K) \* t) F/ P- q第1步:发送任务通知
2 J/ \' J% l0 `% q
  1. //任务句柄
    7 V4 m) q. O4 y7 e- q/ X
  2. TaskHandle_t DataProcess_Handler;
    5 Q8 t- n8 ]- h' i
  3. //发送任务通知
    % Z6 g! ]6 U  i0 D' n0 W
  4. vTaskNotifyGiveFromISR(DataProcess_Handler,&xHigherPriorityTaskWoken);8 ]) ]1 O4 Q' j& Z9 \% |6 c4 F: k% X  }1 B
  5. //如果需要的话进行一次任务切换8 U4 S; B( u& n" z. V
  6. portYIELD_FROM_ISR(xHigherPriorityTaskWoken);  Y' J1 b0 y# W
复制代码

) S2 r1 `8 ^: f6 n7 q# w2 ^/ Q第2步:获取任务通知
3 p0 K) u+ h: Y# G9 ?5 n+ L
  1. u32 NotifyValue=ulTaskNotifyTake(pdTRUE,portMAX_DELAY);        //获取任务通知; 0 ~0 F8 ]' L* s
  2. - B1 q1 R' k+ q' m
  3. if(NotifyValue==1)        //清零之前的任务通知值为1,说明任务通知有效
    $ m/ k  l/ m5 q* {: ~  O8 O
  4. {        " a2 g  K/ M7 M2 @# C. s$ N
  5.         //user code3 }/ P9 D  k8 O: y( V; ^3 F$ o* A
  6. }
复制代码

4 H& E) a" e4 S8 b7 F1 t2 _总结: X$ x8 Q. ?- I
以上是任务通知模拟二值信号量的常规用法。3 g# V2 G  c* G

  i' e- D% n, ?' y
; l  f. R+ ^0 z( i$ ~# g. E9 A- Z$ w) z' G$ F* Z; G
赞 收藏 评论0 发布时间:2022-3-9 10:26

举报

0个回答

所属标签

相似技术帖

官网相关资源

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