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

B-U585I-IOT02A--8.ThreadX点灯

[复制链接]
奇迹 发布时间:2021-10-22 22:05
只从ThreadX开源之后,凭借降维打击的优势吸引了一票开发者,也吸引越来越多的厂家加入其中。4 j7 A9 j: D/ J+ Z( r6 _( _+ h* l: s
ST也在U5的时候,第一次完全摒弃了以前大杂烩的模式(FreeRTOS+lwip+FatFS+自家USB),完全投入ThreadX怀抱。当然为了保护自己TouchGFX的尊严,ThreadX GUIX是没有引入滴。看这形式,老一套大杂烩在新的芯片是不会在被支持了,兄弟们,ThreadX搞起来。当然也可以研究一下CMSIS RTOS适配层,一招吃遍天。& H6 u. b1 |; C) @) @
今天就简单拿ThreadX跑个LED,小小一颗LED,让我水了多少文章啊,哈哈哈。! Q9 U; ~/ K1 f$ |% E9 K) f3 G

3 j: F5 V9 n) ~' b8 n: x打开STM32CubeMX,创建一个工程,具体可以看我之前的文章。1 x+ K1 H1 n) K" b5 C2 k# j
- B' I, c4 A1 R1 Z/ R
简单配个时钟/ b0 |, u) D! U
QQ截图20211010205358.png
) R- q, Y; |0 d, f, z: X+ @0 B开一下ThreadX- W' d2 W# ]+ B* U6 R9 W; D
QQ截图20211010174559.png + C  E) x8 \# J4 D- Z

$ p$ Y4 p2 T+ J9 E: S1 p  L* f3 D配置一下,加大一下内存池,10ms的节拍实在不习惯,改成1ms, ]" v4 T" a) H) N: ?
QQ截图20211010205449.png
! G  c( r0 L# D: s% W; e5 M8 {  u3 X: W5 o
. X! M. Q9 L; R$ B5 Y6 D3 E/ F
配置一下俩小灯
7 T  {& a4 `' }: b6 m4 U! s$ s QQ截图20211010205546.png
+ M) P/ S$ ]  ~0 m5 _1 |# B
5 T& @+ ?' p5 u+ \Icache老是弹窗,太烦人了,给它打开。/ l2 w$ P# K+ v. [  A8 i; m; [" T( S
QQ截图20211010205603.png
- ?+ g) a1 D+ t! \3 v! N. l* C' |2 i# @% i
更改一下库ms延时的定时器,滴答让给ThreadX。+ W. f# P2 `) L! J: A
QQ截图20211010205650.png
8 V' u- I  A, N8 c4 b9 B% y6 R
! ~& J4 W* [( t4 K' ~配置一下别的,然后生成代码。. ?! r7 a/ x1 D; F5 G8 R

4 U- t, l# W3 @3 }# T0 a% w1 R1 O任务配置
! P3 A! U: a# j9 @* Q
  1. #define APP_LED1_TASK_SIZE 512
    9 _# z+ g' v; s: X7 m8 R
  2. #define APP_LED1_TASK_PRIO 4
    9 c/ R  T2 P" o4 D
  3. TX_THREAD MsgSenderThreadLED1;' F6 j$ O6 |4 |6 O
  4. - ]: u. _  M- F9 ]& r; g& o/ Z
  5. #define APP_LED2_TASK_SIZE 512
    8 t' Z, ?/ r0 u) u: F( b# N
  6. #define APP_LED2_TASK_PRIO 4
    7 C4 B5 S: Z. q6 O! P9 Z6 ]4 N$ W
  7. TX_THREAD MsgSenderThreadLED2;( S- b  x& r, [/ j
复制代码
6 ~% p/ D7 J5 `5 J9 R. k
任务初始化代码
) r+ J  h( @6 U
  1. UINT App_ThreadX_Init(VOID *memory_ptr)
    . D& I. b6 _5 O' {! I& H6 H% s
  2. {
    , I  |& |+ V6 p! f0 |0 I
  3.   UINT ret = TX_SUCCESS;% j' I: x% ^; A% W" a
  4.   TX_BYTE_POOL *byte_pool = (TX_BYTE_POOL*)memory_ptr;
    5 U$ D& f& c! d% q7 n" u% B! G
  5. 3 s4 y, i+ `/ Q! Y: D' N' F
  6.    /* USER CODE BEGIN App_ThreadX_MEM_POOL *// |7 W* [& _6 X% h+ X& s; i1 `
  7.   (void)byte_pool;, g/ y# q/ O7 ]7 p0 g- B4 F
  8.   /* USER CODE END App_ThreadX_MEM_POOL */; u* e! U  w8 g) k( E# f

  9. 8 A' ~. F6 B6 s8 Y7 r2 @
  10.   /* USER CODE BEGIN App_ThreadX_Init */
      k$ U" M+ i8 x7 G4 Z# b+ p
  11.     CHAR *pointer;& K% [* \8 I. l# }4 w( m, [
  12.     if (tx_byte_allocate(byte_pool, (VOID **) &pointer,
    : L, p. g+ [& D2 Y  _, V: I4 J% S
  13.                          APP_LED1_TASK_SIZE, TX_NO_WAIT) != TX_SUCCESS)+ `( k* Q3 l! e5 H( z6 D( ]
  14.     {7 W6 b/ ?( r' a7 s4 ?
  15.         ret = TX_POOL_ERROR;/ X8 O$ Y) `' ^) Q- \
  16.     }5 I% o" D' }; `' f1 w
  17.   2 }4 H; k5 F8 L
  18.     if(tx_thread_create(&MsgSenderThreadLED1, "LED1 Task", . G, P/ E/ A$ H  v; D  h
  19.                         MsgSenderThreadLED1_Entry, 0, pointer, APP_LED1_TASK_SIZE,
    5 P; h, W  w1 S7 {6 k4 Y
  20.                         APP_LED1_TASK_PRIO, APP_LED1_TASK_PRIO, / C: O, d" N6 u
  21.                         TX_NO_TIME_SLICE, TX_AUTO_START) != TX_SUCCESS)
    ) d" X5 ]+ W2 _; p& j9 B
  22.     {
    0 [0 x8 T( O5 j8 [/ v3 x% H0 V
  23.         ret = TX_THREAD_ERROR;; H7 Z) l; P# k/ ^5 L2 I. d. H
  24.     }8 E: i/ t! g; B/ K2 d  {# e+ E) W
  25.     3 Y6 ?, q: N, @# A" E# o
  26.     if (tx_byte_allocate(byte_pool, (VOID **) &pointer,: D5 l' s+ s! w7 o8 h1 b
  27.                          APP_LED2_TASK_SIZE, TX_NO_WAIT) != TX_SUCCESS)
    , {0 d. M2 T  T8 X9 M
  28.     {
    $ k! L, r0 D$ ^  ^) ]8 W# M4 X
  29.         ret = TX_POOL_ERROR;
    8 E% U* P  m. Q! p/ @, V
  30.     }
    / `$ y- `0 M! m0 b1 a( i) l- c/ F
  31.   
    5 x. S$ _, p3 [0 h
  32.     if(tx_thread_create(&MsgSenderThreadLED2, "LED2 Task", 4 o* z' t  V$ Q
  33.                         MsgSenderThreadLED2_Entry, 0, pointer, APP_LED2_TASK_SIZE, : G$ O) H0 }6 v# M5 {4 b
  34.                         APP_LED2_TASK_PRIO, APP_LED2_TASK_PRIO,
    ! [+ `: ]! N. M* |3 L
  35.                         TX_NO_TIME_SLICE, TX_AUTO_START) != TX_SUCCESS)- J4 j  O- y8 [9 W# B
  36.     {: J+ M$ }/ Q2 i5 M; e" Q. L
  37.         ret = TX_THREAD_ERROR;0 u1 G* r0 s4 M+ P
  38.     }& U8 E6 q  a) o5 B0 F' e
  39.   /* USER CODE END App_ThreadX_Init */' d' D' w% ~) p! }7 _
  40. # E( t' }* n# U* P
  41.   return ret;: L: B0 s) B3 q8 Z  X* ?# U3 \
  42. }
复制代码
, O6 g; k" X; c( p1 _9 }3 `
俩任务函数,绿灯1S翻转一次。红灯0.5S翻转一次。) i5 Y6 r6 b3 L
  1. void MsgSenderThreadLED1_Entry(ULONG thread_input): Y4 m& n8 `2 p: s: A
  2. {% h5 O9 V1 Z3 C  U. Z
  3.   (void) thread_input;
    " m' P" H- W/ d2 O: C
  4.   while(1)  o; o3 G6 @" ^7 y8 P( j
  5.   {
    1 U+ d: p/ p% L& _5 }. B! R
  6.     HAL_GPIO_TogglePin(LED_G_GPIO_Port, LED_G_Pin);' n% V$ Y8 p* B9 ?) K
  7.     tx_thread_sleep(1000);
    6 K4 I( v8 d' e$ s" C4 N( V
  8.   }
    ! w$ l5 J& A  X3 s5 J. y0 ?
  9. }
    ( L/ T0 j8 L  q9 B+ b; q

  10. ) Z+ L" |6 {) `0 W4 E
  11. void MsgSenderThreadLED2_Entry(ULONG thread_input)
    ! W3 `6 v9 L9 C- L
  12. {# X+ |0 e$ `/ C2 d
  13.   (void) thread_input;1 H  h+ g9 a9 @+ S
  14.   while(1)
    6 t! ?) E3 m) x
  15.   {
    ! t4 Z% m8 R+ V$ \
  16.     HAL_GPIO_TogglePin(LED_R_GPIO_Port, LED_R_Pin);
    , ?/ @, V& c: o- O2 @
  17.     tx_thread_sleep(500);
    2 [. p$ {$ @4 n2 q7 g
  18.   }
    1 N; |1 g# E  g
  19. }
    9 a/ F. |% f+ ~
复制代码
8 x8 N% E' X2 m
下载验证,完事。
+ M% V; |% ~/ W; ^/ N* }5 u. d# [6 [2 t& a
* b: }' L: |' a- s) z1 {& B

3 K+ g1 a8 R' v) [3 O
赞 收藏 1 评论12 发布时间:2021-10-22 22:05

举报

12个回答
子曰好人2号 回答时间:2021-10-27 10:16:13
捧场~
( W* u1 T% v9 x* T, O
昱枫 回答时间:2021-10-27 10:22:14
学习了6 q9 s, ]* X8 P# J  a
joshua天宇 回答时间:2021-10-27 10:27:19
学习
: g2 v, ^& K1 h0 K
wudianjun2001 回答时间:2021-10-27 10:29:32
学习学习
0 R" l, F$ W4 u
zhangt0713 回答时间:2021-10-27 10:47:56
行云流水般的操作  j# p4 \8 C- t. y2 o
QIANYING79 回答时间:2021-10-27 14:33:07
这算是独占了?
# `; G1 e- I! M1 {; O) L8 ]1 k
moluxiyan 回答时间:2021-10-27 16:28:55
ThreadX过了很多认证. r9 z* f. F0 ?7 s
orima 回答时间:2021-10-27 21:58:31
学习了,很详细。感谢!! s- R7 k" `$ `
qiangtech 回答时间:2021-10-28 09:58:04
会者不难,难者不会。0 X0 ]1 W5 ~1 o8 r) ^& k# J
orima 回答时间:2021-10-28 20:59:11
学习学习
+ h6 j4 b/ [, F1 p8 f7 \) L
VegardCheng 回答时间:2021-10-28 22:36:19
ThreadX有什么优点?8 d% e$ i, B0 A! Z) L4 C
BEEE 回答时间:2021-10-28 23:40:40
想赶快使用ST新推出这款STM32U5系列产品,学习学习% v. F  D1 c& w5 v. W

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