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

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

[复制链接]
奇迹 发布时间:2021-10-22 22:05
只从ThreadX开源之后,凭借降维打击的优势吸引了一票开发者,也吸引越来越多的厂家加入其中。
/ i+ G3 Y" R9 t+ c# f4 o1 G0 }ST也在U5的时候,第一次完全摒弃了以前大杂烩的模式(FreeRTOS+lwip+FatFS+自家USB),完全投入ThreadX怀抱。当然为了保护自己TouchGFX的尊严,ThreadX GUIX是没有引入滴。看这形式,老一套大杂烩在新的芯片是不会在被支持了,兄弟们,ThreadX搞起来。当然也可以研究一下CMSIS RTOS适配层,一招吃遍天。
6 w+ f1 t  a) }2 T3 O$ @今天就简单拿ThreadX跑个LED,小小一颗LED,让我水了多少文章啊,哈哈哈。
& c- X+ k& N2 p8 F
+ u$ Z4 }# C2 `; l打开STM32CubeMX,创建一个工程,具体可以看我之前的文章。
, l- Y0 d7 B" a; {( n8 g
" O0 V9 b+ N& C6 P* h. p
简单配个时钟3 j5 [2 ~. i% N+ O1 k
QQ截图20211010205358.png " t, ^2 `' I- A& J, u
开一下ThreadX  v7 T7 S% W! G
QQ截图20211010174559.png 3 o8 s+ r9 d1 r9 N. ~  e* b3 U! l! [
3 A1 Q: G- z- g
配置一下,加大一下内存池,10ms的节拍实在不习惯,改成1ms" l) {  `" Y6 u3 Z
QQ截图20211010205449.png
4 ]6 S0 D$ V% J. {0 R: p/ _5 M6 t1 y$ P& `+ z7 z- f  Y, K

' y% N( ^2 H# F6 Z配置一下俩小灯  W8 z4 n3 y& m3 U. S9 s
QQ截图20211010205546.png
6 P& b) g" n3 V$ J' P: l3 W! t6 n7 I8 }) s! i9 q% I( R
Icache老是弹窗,太烦人了,给它打开。& d# q* w) T" }: L$ O* b
QQ截图20211010205603.png 5 \- e6 ]5 V1 L5 `# `

0 E3 _' h  P7 u/ n更改一下库ms延时的定时器,滴答让给ThreadX。- t  [* k) M( e
QQ截图20211010205650.png - u( K3 ^5 n+ C2 i( H

: }' A0 Q/ D: G9 A. h* i9 C配置一下别的,然后生成代码。; S  Y' z, B0 Q/ j: Z# m

' v* e% V8 o! r任务配置6 I) s7 u: t" ?5 q( c0 q
  1. #define APP_LED1_TASK_SIZE 512" N1 o0 n, W$ L. H, w2 b
  2. #define APP_LED1_TASK_PRIO 47 G2 U  y5 I  F& Z. B
  3. TX_THREAD MsgSenderThreadLED1;
    - V# y3 K6 l9 j- n& L. n

  4. 3 M+ u; U/ Q. H3 x2 E
  5. #define APP_LED2_TASK_SIZE 512
    & d& h- w/ S* G) l6 [
  6. #define APP_LED2_TASK_PRIO 4
      R: w2 e* P* W' K6 L
  7. TX_THREAD MsgSenderThreadLED2;
    ; q+ O: o  ]& W$ i
复制代码
: ~, \6 A) k! ^
任务初始化代码
! P/ T# `8 F! M( o
  1. UINT App_ThreadX_Init(VOID *memory_ptr). F$ ?6 s- d- G- w" |" h+ _
  2. {( C! V, e0 e" w
  3.   UINT ret = TX_SUCCESS;
    : _3 W/ e) r( |2 w  g; }" i! L
  4.   TX_BYTE_POOL *byte_pool = (TX_BYTE_POOL*)memory_ptr;; g: ~8 T; ?/ z

  5. ( R( ^0 p/ ~* \# x( p7 K
  6.    /* USER CODE BEGIN App_ThreadX_MEM_POOL */* U* D. g8 z( }7 ~; M9 s
  7.   (void)byte_pool;/ e2 ~4 ]2 `( I7 W1 @
  8.   /* USER CODE END App_ThreadX_MEM_POOL */
    + J7 M$ e2 X3 P6 q0 k
  9. * O8 A: k: L$ a2 S
  10.   /* USER CODE BEGIN App_ThreadX_Init */
    & w* E  r. u) e# W
  11.     CHAR *pointer;( ^# r/ {( Y! `1 P$ w6 `  d/ T
  12.     if (tx_byte_allocate(byte_pool, (VOID **) &pointer,% }+ K, M1 R5 G) s3 |5 k/ C
  13.                          APP_LED1_TASK_SIZE, TX_NO_WAIT) != TX_SUCCESS)
    3 q6 ^& }" M" z- e7 Z
  14.     {
    . z7 W1 `; H  g" p& n  Y
  15.         ret = TX_POOL_ERROR;
    # ~8 R6 w5 ]) W2 A$ a( u" m% c" d
  16.     }
    * [' o% v3 `  R9 h
  17.   9 T' g  a' I8 d. d, n6 @
  18.     if(tx_thread_create(&MsgSenderThreadLED1, "LED1 Task",
    2 ?( }& x( t( u4 T/ i8 s
  19.                         MsgSenderThreadLED1_Entry, 0, pointer, APP_LED1_TASK_SIZE,
    / p8 S, ?: Y# u' `
  20.                         APP_LED1_TASK_PRIO, APP_LED1_TASK_PRIO,
    ! k+ I* u: v6 I/ ^! M
  21.                         TX_NO_TIME_SLICE, TX_AUTO_START) != TX_SUCCESS)) k0 s, y2 t. V
  22.     {
    ) V5 S# U0 h. n" A2 ]
  23.         ret = TX_THREAD_ERROR;  u2 d# C6 V4 i$ y
  24.     }
    ' M! v, V; r# f0 ?) g2 k* v# b( ~
  25.     0 d& U' }' |0 L
  26.     if (tx_byte_allocate(byte_pool, (VOID **) &pointer,' G  p5 p9 ?- h% P/ E) W
  27.                          APP_LED2_TASK_SIZE, TX_NO_WAIT) != TX_SUCCESS)7 [4 o8 \& `( ^. o% p
  28.     {
    2 t3 q/ F8 I; _' n8 N7 c; T
  29.         ret = TX_POOL_ERROR;
    2 [( v$ t! L- I
  30.     }) [( f4 b* R; E8 p4 J% Q1 z* ?' S% R
  31.   
    4 d3 v+ ?. U! [4 u9 d- h* a1 V) S
  32.     if(tx_thread_create(&MsgSenderThreadLED2, "LED2 Task", # _, h, w( a8 N3 C; H
  33.                         MsgSenderThreadLED2_Entry, 0, pointer, APP_LED2_TASK_SIZE,
    , _3 u3 w# z3 j9 O6 u
  34.                         APP_LED2_TASK_PRIO, APP_LED2_TASK_PRIO,
    7 J% F# y' s, Q1 {
  35.                         TX_NO_TIME_SLICE, TX_AUTO_START) != TX_SUCCESS)
    ; ]7 N5 f, a) `! X( E2 e) d
  36.     {
    ) T7 H& `# m; \: s
  37.         ret = TX_THREAD_ERROR;( @% K7 e, `+ K7 h6 \
  38.     }
    % S5 m9 H& j- }" g6 I- `. S
  39.   /* USER CODE END App_ThreadX_Init */  R& P& X, K1 U7 k* t" U; Z+ W
  40. - ~5 z0 g+ b- n; K. ^# X( s; m
  41.   return ret;
    , }2 W1 D3 Q0 Q2 S0 {; D
  42. }
复制代码

7 {6 x9 f. E4 R9 c% w6 h. E& f6 v俩任务函数,绿灯1S翻转一次。红灯0.5S翻转一次。
* u. a; f5 R- B' C, [
  1. void MsgSenderThreadLED1_Entry(ULONG thread_input)$ R; ~8 i& E# e" F4 r  \! j
  2. {
    " \4 c2 V/ g: `: ?* Q
  3.   (void) thread_input;& i) i* p' q3 M% M4 i9 A) f8 I" z
  4.   while(1)
    , c$ ]2 x2 U; d- C
  5.   {( T4 ^# o9 L- G( X: w; J& O
  6.     HAL_GPIO_TogglePin(LED_G_GPIO_Port, LED_G_Pin);7 v. z8 t" r* E( L, v
  7.     tx_thread_sleep(1000);
    2 V" x& f4 S6 c+ U7 j
  8.   }  }# G! r( s0 ?& c0 S
  9. }3 }$ l5 b- W0 k2 d5 L
  10. $ q( l( N2 D) a! v! J
  11. void MsgSenderThreadLED2_Entry(ULONG thread_input). u" W9 d$ N( s
  12. {
    ) X, u! Y& S: s) G5 u# B
  13.   (void) thread_input;
    ( A  i- F4 z) A" Y
  14.   while(1)
    , N0 f. C. C- k! _9 z+ g2 w
  15.   {( g" G4 G/ Z' \0 l; L
  16.     HAL_GPIO_TogglePin(LED_R_GPIO_Port, LED_R_Pin);" }& Z3 a( S: Q
  17.     tx_thread_sleep(500);
    0 M' M4 k/ C) r; ~: M8 k& W2 g
  18.   }) j/ H  H4 K) M
  19. }
    # D( i! ^  ^; y. ?3 w/ y, O
复制代码

7 h; n9 ^# |# d0 @" R; F下载验证,完事。# I* y) I$ ]( j+ s3 ~

) q/ h; P4 ^( q. T, {5 C! ~- j
$ w- l! B- q- z* S- l* Q( i

1 \% t( L* _, \% h/ f6 S) c9 W
赞 收藏 1 评论12 发布时间:2021-10-22 22:05

举报

12个回答
子曰好人2号 回答时间:2021-10-27 10:16:13
捧场~
1 {0 f4 g# q  j
昱枫 回答时间:2021-10-27 10:22:14
学习了
0 r3 P( d( V+ V
joshua天宇 回答时间:2021-10-27 10:27:19
学习
2 a% a3 h9 J8 b5 [  Z
wudianjun2001 回答时间:2021-10-27 10:29:32
学习学习8 [# {8 u5 [( w; ]; T
zhangt0713 回答时间:2021-10-27 10:47:56
行云流水般的操作) O& L- y4 w6 H
QIANYING79 回答时间:2021-10-27 14:33:07
这算是独占了?: p: \9 }7 H% Y. S2 J' J! }- h
moluxiyan 回答时间:2021-10-27 16:28:55
ThreadX过了很多认证
3 L$ j7 q6 A( \( E* ~
orima 回答时间:2021-10-27 21:58:31
学习了,很详细。感谢!
3 m+ ]# i# t6 Z
qiangtech 回答时间:2021-10-28 09:58:04
会者不难,难者不会。
5 g" m& Z* K0 w8 b- H" c7 P9 p, j
orima 回答时间:2021-10-28 20:59:11
学习学习
* \8 ~& J" L, r5 O5 u" Q
VegardCheng 回答时间:2021-10-28 22:36:19
ThreadX有什么优点?* Q% }4 i. Y7 c- I% D/ i
BEEE 回答时间:2021-10-28 23:40:40
想赶快使用ST新推出这款STM32U5系列产品,学习学习" g9 Q9 K: t0 O0 M( g: X
# D5 L. ~, p$ D- |+ Y0 r, I
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版