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

【经验分享】STM32之FreeRTOS(三):二值信号量用法

[复制链接]
STMCU小助手 发布时间:2022-3-10 21:29
一般使用步骤是:' C# O5 \3 j; s2 i$ @# ?* G- e
1、创建二值信号量; j, @3 z" T  G/ E: E) W# c2 ^" H& Z
2、在一个任务内释放信号量! \6 u% v. U1 Q! _$ u. r) K, c& M1 Q
3、在另一个任务内阻塞等待信号量
1 s' G: l! O( e( A/ n

% x1 v& E7 s! I0 u' Q下图是使用二值信号量的工作流程:
( T% @( X1 m/ l7 i
6 u6 ]2 d3 o+ r4 n! e; j; n XM2A8F89@E]BXLGI4@INJ`H.png 2 L5 ~2 N- |& f
7 B+ [; }7 D' R! b  I4 L6 q

6 c, J2 C- L3 T; M4 `& Q9 k第1步:创建信号量
  z+ D6 U: Z8 s$ N
  1. SemaphoreHandle_t BinarySemaphore;        //创建二值信号量句柄
复制代码
# K: T/ R$ V% w( @  R! a; j
在semphr.h文件中有如下定义:
; k) a: }9 q9 V% M# s- t0 G6 b3 d$ R" R2 Z" E3 N6 V  Z: Z* j$ o  E
  1. typedef QueueHandle_t SemaphoreHandle_t;
    ' L& N7 H9 f0 N4 @. f  N  d
  2. //可以看出二值信号量和队列使用相同的声明类型
复制代码
( C5 F/ o8 @) J" |
第2步:释放信号量: i9 X: o7 M& y
下面是两种释放信号量的方式,根据是否在中断函数内释放选取
& c0 j8 e% D; Z8 w- E

  1. 1 E1 M6 R9 u4 z! L
  2. //1、非中断内释放二值信号量: M  J2 t5 x& F5 y" r& H7 c
  3. xSemaphoreGiveFromISR(BinarySemaphore);. X7 Q. S6 G# W0 d0 q0 @
  4. //2、中断内释放二值信号量
    7 N1 @6 b% ^) [; B' s/ X" L
  5. //声明一个句柄只是用于下面释放函数参数的调用8 T. {0 x: _+ E/ C5 Q. I
  6. BaseType_t xHigherPriorityTaskWoken;
    ( g% t5 s( s$ I4 l7 P* U3 L& `
  7. //中断内释放信号量函数* h- V# r4 T. |: ]0 B) c
  8. xSemaphoreGiveFromISR(BinarySemaphore,&xHigherPriorityTaskWoken);
    , [' X3 D+ [& L9 l. J; M
  9. //如果需要的话进行一次任务切换; Q9 s& U4 \% F. J/ b& ~% `5 G
  10. portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
复制代码
- t: P& e$ v: T: |5 s$ V5 Y
第3步:获取信号量9 Q% H  J6 D1 x, V# k& Y: w# _
  1. //声明一个获取信号量返回类型  k2 ^  i: c' j' A
  2. BaseType_t err=pdFALSE;
    : F" E* v5 s/ K( @
  3. //获取信号量; F$ r& j. M- `" K
  4. err=xSemaphoreTake(BinarySemaphore,portMAX_DELAY);        //获取信号量
复制代码
( P% A) X( g+ Z" _: M: w9 b
总结:
+ h9 w' u0 E; A以上是二值信号量的常规使用方法。
8 K5 x5 E' Q& s6 e4 ^4 O$ S* J$ V( R- B
赞 收藏 评论0 发布时间:2022-3-10 21:29

举报

0个回答

所属标签

相似技术帖

官网相关资源

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