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

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

[复制链接]
STMCU小助手 发布时间:2022-3-9 10:26
任务通知模拟二值信号量,实际与二值信号量的发送与获取十分类似,只是将二值信号量的发送与获取换成任务通知的发送与获取。0 w6 K6 |4 o8 ?

$ R( W6 i  P$ q( f5 h任务通知优缺点: $ O. M5 m$ ]2 ?$ ]; P& e" @
优点:可以提高响应速度并减少RAM使用。
/ x' o9 n8 e& }# n缺点: 1、任务通知只能有一个接收任务 2、接收任务可以因为接收任务通知进入阻塞态,而发送任务不会因为发送失败进入阻塞态
% P7 I% U1 \5 A. N. s) U, q
0 p* t# f- J4 c( Z3 P6 A
$ @) X$ N% n- L  ?& Q- [; T一般使用步骤是:) ~+ o% [8 ]. _6 w6 i6 L  w9 v* ?5 \
1、发送任务通知
. U' D3 M4 i7 ?2、获取任务通知
; ~$ F4 H7 a3 @6 J# l
7 c  ]/ K0 Z! P& R# V4 D8 l
第1步:发送任务通知
( \& g1 u5 A% s+ |& O' d$ T2 @
  1. //任务句柄; X! \' a4 ^* b
  2. TaskHandle_t DataProcess_Handler;* i0 U0 w% b4 Y: b
  3. //发送任务通知
      j  L" E: B6 F9 Y1 h. E
  4. vTaskNotifyGiveFromISR(DataProcess_Handler,&xHigherPriorityTaskWoken);6 j5 d6 c" w  x' s" q8 A  f
  5. //如果需要的话进行一次任务切换
    $ a; b4 q( n8 ]$ v9 e% H
  6. portYIELD_FROM_ISR(xHigherPriorityTaskWoken);8 z, m. X5 o4 ]: b0 e8 T
复制代码
( H7 D% {0 S- F0 y" W" p
第2步:获取任务通知
# Q* ]: T) j4 h" B' d& _6 N# x% Y% I
  1. u32 NotifyValue=ulTaskNotifyTake(pdTRUE,portMAX_DELAY);        //获取任务通知; - T+ E) h" ~3 W7 W+ O* J) [1 P
  2. * l* Q0 R4 |* d  Z! }* j
  3. if(NotifyValue==1)        //清零之前的任务通知值为1,说明任务通知有效; t5 u" {% ~2 p6 j( ^- a- h# @
  4. {        8 P, B5 z& Z  W' ^# I5 s
  5.         //user code+ c9 K/ J: b3 C
  6. }
复制代码

* p2 B# _+ n; ^总结5 w- X0 T* Y/ |$ m6 l# B# z
以上是任务通知模拟二值信号量的常规用法。
* [7 J" u5 M" v# s* G! c' A' r, I, K/ W% X& `. r. ~

; [) N5 _0 t1 F4 e, r5 F/ ^# @6 u* m2 [6 D/ V
赞 收藏 评论0 发布时间:2022-3-9 10:26

举报

0个回答

所属标签

相似技术帖

官网相关资源

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