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

【经验分享】stm32RTOS创建任务

[复制链接]
STMCU小助手 发布时间:2022-5-22 22:00
前言1 k' V' j. T6 [7 L
本篇文章带大家学习一下如何使用RTOS API函数创建任务。
: r8 w1 O7 q  s8 M! j2 Z( I* M0 ~9 H4 T2 v0 L- y( b0 ?5 W0 e6 L
一、cuebMX配置
5 q- C+ s% A4 }+ b; z0 T! a" e具体配置
( T+ x7 J7 J) J' |5 g  G/ v
- |% S) G+ ?8 K二、代码解析
2 D1 e5 S1 }( o! R2 D; p" N1.系统创建的任务函数
% G% p! r4 H% P' ]5 d$ @! A. N下面我们来看看系统是如何创建一个任务的。
, F9 n8 W) I; L. x! B: S: K5 M; B1 t
  1. osThreadId defaultTaskHandle;//任务函数句柄, K6 k. q5 Q% o9 N8 T' a4 y; D

  2. 9 U, {% j2 B9 V& O
  3. //StartDefaultTask:任务函数名字
    0 N2 k: f4 s/ G8 U9 Q) V
  4. //defaultTask:名字* X# \) S! m9 `) S- g" t
  5. //osPriorityNormal:任务优先级2 I& l- Z6 Q2 N
  6. osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
    & a( {& A6 ~- J; Y! K$ Z# `
  7. defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
    3 r# n$ M0 c# v& I* `) p

  8. $ \2 d0 K* y; p5 }. d  b( t$ p
  9. //任务函数的格式
    8 _& h; [# ]1 U0 Q
  10. void StartDefaultTask(void const * argument)0 u1 r: c; a' n& _4 s9 ]2 q, X6 B
  11. {! B/ j8 h" w$ l5 f
  12.   /* USER CODE BEGIN 5 */
    7 |5 v  N) Z/ d4 p4 ^6 m3 M" K6 b* k

  13. ' m+ T3 \" {1 \
  14.   /* Infinite loop */
    . }: g6 f5 V' P% y$ P) r
  15.   for(;;)
    7 j  U5 C) i3 G2 s% a
  16.   {
    : H/ F, }6 B  z. ^3 H7 H

  17. - m* i8 ~2 F. B( `6 {
  18.   }
    & M! I- f: ^) B5 j, u9 ]
  19.   /* USER CODE END 5 */
    / U2 U0 @& \" |. _5 j5 E
  20. }
复制代码

3 B: `. L6 ?5 Y! `2.函数任务优先级/ _7 D# S. A2 {  u0 d5 [; M
RTOS中给我们定义了如下优先级,优先级的数值越大优先级越高。3 j6 ~4 v8 p# _& A* }
9 d( n2 k, M! Z& x
  1. typedef enum  {
    3 o8 _- U9 [9 C( e
  2.   osPriorityIdle          = -3,          ///< priority: idle (lowest); ~( D# g3 K' r, X5 F
  3.   osPriorityLow           = -2,          ///< priority: low
    7 @' I; j, x3 u) ?: M9 j
  4.   osPriorityBelowNormal   = -1,          ///< priority: below normal+ D3 O2 Z8 P& P' [) G! B
  5.   osPriorityNormal        =  0,          ///< priority: normal (default)
      S0 N$ _; p9 }& g6 m! f
  6.   osPriorityAboveNormal   = +1,          ///< priority: above normal
    ; s- b9 u5 b: b0 s! }" t
  7.   osPriorityHigh          = +2,          ///< priority: high
    4 q+ l$ t% ~! ]% k% P0 g
  8.   osPriorityRealtime      = +3,          ///< priority: realtime (highest)
    + S. q  N6 o1 s& S, I) I! g+ e. m2 g* w
  9.   osPriorityError         =  0x84        ///< system cannot determine priority or thread has illegal priority1 j5 P. Q6 ~/ H9 d: ^1 e2 t
  10. } osPriority;
复制代码

: K4 y# [% ?+ `. F3.自己创建任务函数& l9 \- W  ]6 x8 U/ @
我们可以仿照系统给我们创建的函数,自己去创建任务函数。
! D) V1 i. h7 b3 J# @" j1 \
% B+ @. ~4 D/ D7 o
  1. osThreadId DirveTaskHandle;
    : _; J/ B7 m- w& _

  2. 4 I6 i, g$ S1 c' Q9 p7 L! z/ H9 c
  3. void DriveTask(void const * argument);
    0 x% |4 i+ X) M: n. ~: f. {
  4.   z% A0 f! L2 F, V8 W& K) y
  5. osThreadDef(DriveTaskName, DriveTask, osPriorityAboveNormal, 0, 128);
      l6 n4 I7 h* Q7 O* ?2 T6 Q3 q
  6. DirveTaskHandle = osThreadCreate(osThread(DriveTaskName), NULL);
    8 j. _) i0 p# C# ^6 t; u% Z% |

  7. ( ?) J8 }( }$ ~9 ~0 M
  8. void DriveTask(void const * argument)# o; |4 \, I' ~9 Z+ Q; z
  9. {  7 J; t) k( I8 x7 S+ T6 r8 I3 i( y
  10. ) I7 T; f: z/ B* C
  11.   for(;;)
    : j& D# K, d! q# B" J
  12.   {
    ( N2 Y8 ~( }$ W0 P& G

  13. & N5 e& s/ K% {( `# q

  14. 5 D! B% Z! e  T+ P8 O" b
  15.     osDelay(5);//调用延时才会释放资源
    ; \" x5 f) W" K& h# L) ^
  16.   }- r) S! ]5 u5 G& @
  17. }
复制代码

: V- K2 a) D! w5 h2 _; r由此我们的任务函数就创建完成了,我们可以在任务函数中去调用我们自己写的函数,或者执行自己想要执行的程序。6 _* ^3 P# i" I& u' x
8 u2 Z$ A5 v# ^. p5 f
总结
; P, a! `- j% \3 Q! d: l! x; `大家有什么问题的话,可以留言或者私信。
/ Y, W9 j' {, W5 r* x! q6 O% X+ f0 {* V5 b  W
4 i5 H' A8 e0 {! o0 ?
赞 收藏 评论0 发布时间:2022-5-22 22:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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