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

基于STM32F407的FreeRTOS任务的挂起与恢复(3)

[复制链接]
攻城狮Melo 发布时间:2023-10-19 16:09
上一期学习了任务的创建和删除,这一期学习任务的挂起与恢复。
9 }7 w1 l: B5 z2 o$ C) ]4 r# [
所谓的挂起,也可以认为是暂停,将运行中的任务挂起后,任务将暂停运行,直至系统恢复任务的运行。& F3 c* V0 g! g0 T9 u
微信图片_20231019160904.png

0 f& |, r- M, m9 O: ?在FreeRTOS的API文档中找到任务挂起函数的介绍,函数需要的参数为我们想要挂起的任务句柄,如果传递为NULL则暂停我们的调用任务。同样的,在文档中也可以找到恢复任务函数介绍。
+ q- v7 H5 K) p

. l: G) T& `, W, \, I- ?
* h& u, a$ U7 M. S
微信图片_20231019160900.png

6 Z; o' ?. B; h2 ~1 g! Q: k
微信图片_20231019160855.png
( m* |& ~- X' m" Q! N& r

0 Q0 Q- K/ Z# M& Q+ k- V

! d5 G/ `0 v) q: t0 A接下来我们实现一个任务,目标是当LED1闪烁5次后挂起LED0闪烁的任务,当LED1再闪烁5次后恢复LED0闪烁的任务。
/ m' E1 x2 m% `+ }

% o0 Y7 l' E: z" f* L% @
我们在API中找到查询任务状态的函数eTaskGetState,该函数传入参数为任务句柄,返回参数为任务状态。LED0在进行vTaskDelay时是处于阻塞态,因此我们只需要判断LED0是阻塞状态还是挂起状态,再进行挂起和恢复操作。
# M8 v0 U- t7 P' G3 d9 e
/ w9 q: ^5 ?% c$ @% F
微信图片_20231019160848.png
% q4 @5 V( Y. Z* m
微信图片_20231019160843.png
% L) o  l: ^7 c2 Q1 v8 Z/ _
因此我们的代码如下; ~0 O) c9 `. `) P. r# \& L( P+ i
  1. void LED_TOG2(void * pvParameters)//参数为 void * pvParameters
    3 j8 O9 g+ b1 J3 w$ C5 x
  2. {/ G) R& y9 J2 ?* t+ s* H
  3.   while(1)
    ! B* O4 g$ A: n. G
  4.   {: _. Q- e' \# u7 x- ^: k3 @" L5 z1 y
  5.     printf("LED_TOG2 running\r\n");//串口打印运行信息6 o; R) y8 q6 M
  6.     HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_9);//LED0翻转
    % I2 ]8 p$ o( w' q; {' D' [
  7.     LED2_Number++;//LED0翻转计数8 ^- l( K  v* _! O4 P) k/ u4 V9 Y
  8.     if(LED2_Number %10==0)% H( a& C/ s( S$ v- ]9 ^0 m
  9.     {
    % {, R# D# W! U3 E% o
  10.       if(eTaskGetState(LED_TOG_Handler) == eSuspended)
    8 k- z! u, |% ~& y2 L7 ^6 G
  11.       {$ z" T  M$ G! X
  12.         vTaskResume(LED_TOG_Handler);//LED0任务恢复1 B5 k. o% l/ J; j5 q% p# a$ m
  13.       }8 ?% B4 e7 A( e, \' L
  14.       4 a1 _) y+ R/ `4 p, E$ i7 v( |
  15.       if(eTaskGetState(LED_TOG_Handler) == eBlocked )7 R; i; @/ G4 y( v8 ?
  16.       {. q2 s' a) f8 u  q- {
  17.         vTaskSuspend(LED_TOG_Handler);//LED0任务挂起
    ) T- o$ U7 M& ^  R* D
  18.       }
    ! i& b: C0 h) A. E, {+ w0 X: |1 ?9 R
  19.       3 w" C$ y5 G: h0 Q; O& h9 L5 R* f
  20.     }
    4 ~* a7 S- v3 N
  21.     0 J4 q" b% c3 P4 Z8 Y  u
  22.     vTaskDelay(500);//延迟500ms" q+ W" F2 ~) b. Z2 p- @
  23.   }
    5 @. m! B! ^0 L
  24. }
复制代码

( d# W1 \6 M* f' }" e% C* J9 _7 j2 {1 {/ _& l. O
转载自:电路小白$ a" j* I; P8 n) k& u; ~
如有侵权请联系删除0 B3 M/ T6 B" }* x7 Y4 E9 O4 a; @

4 w' o- i& W& n) D1 J1 X$ \
. b! ?; F9 P1 Z  y
收藏 评论0 发布时间:2023-10-19 16:09

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版