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

关于ST NUCLEO-U575ZI-Q的测评创建第一个线程 RT—Thread (2 )

[复制链接]
STMCU小助手 发布时间:2023-1-9 14:00

创建线程是RT_Thread最基本的操作之一。

1、在man.c主程序下面创建静态线程:

  1. /* defined the LED1 pin: PC7 */
    5 I4 k: {- h" F9 W1 i: ?6 z- s
  2. /* defined the LED0 pin: PG2 */4 a' H* {# V) J4 _

  3. 6 M+ F$ j1 \& [% f* c
  4. #define LED0_PIN    GET_PIN(G, 2)
    0 P! A" W) M* C( ?( K! N( Y

  5. # _% o" |/ @: z6 e1 `
  6. #define LED1_PIN    GET_PIN(C, 7)
    ( R# r8 C" x; _, x6 y& S
  7. #define THREAD_PRIORITY         25
    8 s5 M- j- o- ~" i( J+ r
  8. #define THREAD_STACK_SIZE       512
    3 ^: R6 ?3 }! c7 z
  9. #define THREAD_TIMESLICE        5
    + N2 G% p. {3 r4 r% e

  10. $ N- E! |/ p# W2 C; s* K4 M5 q3 @
  11. /* 线程led 的对象和运行时用到的栈 */
    6 C' ~: x7 t/ w3 ?+ {. r. g$ X6 E
  12. static struct rt_thread thread_led;$ {* a& N2 u# s; G! {1 s7 w+ Q
  13. static rt_uint8_t thread_led_stack[512];
    2 {( e6 E# W; K* u7 M% e% R$ l
  14. 2 ~: D" c) T  |. i/ T
  15. /*  线程led 入口 */( @# N. N& }! z$ `
  16. void thread_led_entry(void* parameter)& i  X" O( F* o6 H6 {
  17. {
    " `6 ^5 y; `7 ~
  18.         rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);7 E7 O- v! h  [2 M
  19.         while(1)
    . h# b0 K4 X9 J% y
  20.         {" V+ `" x! U# H1 }+ v
  21.                 rt_pin_write(LED1_PIN,PIN_HIGH);0 o, f8 x- @7 G# w, V. p+ F9 R
  22.                 rt_thread_mdelay(500);3 t) b0 V! K4 x6 f) ~& d7 Q8 W/ d
  23.                 rt_pin_write(LED1_PIN, PIN_LOW);
    % e- t+ g8 x/ H
  24.                 rt_thread_mdelay(500);
    ; [! W! Y/ B: x
  25.         }
    6 [1 U! s) c% N3 _% C# E5 I& L
  26. }2 ?& T5 Y+ j0 C* n9 ?
  27. 8 M0 `. `. P$ D8 `7 k
  28. /* 线程LED1 初始化 */# C/ T2 p: @& k! q5 G) X
  29. int thread_sample(void)3 Y4 R) T8 D, k9 k% J  J; D- y
  30. {
    ) X( f/ y; I! d: h, M! R0 G/ H' f6 D
  31.         rt_thread_t threadled_ptr;4 O2 T5 t4 T9 _
  32.         rt_err_t result;3 _1 _3 q, t3 d: v, s+ H1 h' a, u
  33.         # W- v3 z/ I2 u! t
  34.         /* ' V; ^2 H4 Q8 G8 N; @! O
  35.         * 初始化 线程LED1
    7 |6 n' K) n) j4 ^  l2 ]. f
  36.         * 线程的入口是 thread_led_entry, 参数是RT_NULLL
    # T( I+ u# x* c6 h& [
  37.         * 线程栈是thread_led_stack! L  F% C/ i& N4 Q9 }5 J
  38.         * 优先级是25,时间片是5 OS Tick( Z4 q. D% }) s" a/ }9 \0 h
  39.                 $ N3 I! n6 w3 d6 J
  40.         */
    ) y6 X% Q) S, }% Z0 }* T+ V% p
  41.         result = rt_thread_init(&thread_led,
    5 J" Q! z1 k1 `/ s
  42.                                                                                                         "thread led",* w; b' a# K: B+ K
  43.                                                                                                         thread_led_entry, RT_NULL,
    0 J$ y5 _* h- J; [/ j  y1 Y& o
  44.                                                                                                         &thread_led_stack[0], sizeof(thread_led_stack),
    0 N. C: h. c$ T+ d. ^1 c
  45.                                                                                                                 THREAD_PRIORITY-1,THREAD_TIMESLICE);' S6 S; r2 A: c
  46.         /*  启动线程 */! z- L" H* O0 h& Q+ F3 D% Q- l, b
  47.         if(result == RT_EOK) rt_thread_startup(&thread_led);
    + V2 w0 z! M- s; M0 c9 W7 l8 I
  48.         return 0;
    & a$ X  e: [$ }  j: i6 e
  49. }! Z$ P7 K, e7 I) g% ?# ^

  50. ( @7 H% q7 p, n- P" C/ ~
  51. int main(void)
    1 R- X9 [' O; ~" c
  52. {
    ( Y. ]5 W' J) O! t- R3 H* a
  53.     int count = 1;
    3 ?* O& c! u7 ~8 Z' }
  54.     /* set LED0 pin mode to output */+ S# M( \% V% U, I1 f, ?. E2 p
  55.     rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);; {6 k9 M7 p" M2 M) U6 C
  56.         thread_sample();
    % `+ H' p! ~; s
  57.     while (count++)
    . ]) z* E4 E% b% _
  58.     {
    - k4 n" b. P$ u" ^7 ]
  59.         rt_pin_write(LED0_PIN, PIN_HIGH);
    % |" ~" c( \/ ~8 i) K5 R: P
  60.         rt_thread_mdelay(500);/ u% D# ]. q1 U. H  J- @+ K  }' H
  61.         rt_pin_write(LED0_PIN, PIN_LOW);& \- ]) m: z6 V2 z5 t
  62.         rt_thread_mdelay(500);' H6 G/ p4 R1 b, z! t1 \/ p* v) N8 d
  63.     }
    : d/ f# c; A3 U5 N3 s

  64. & k1 E$ I( p  z
  65.     return RT_EOK;, j5 O* S$ y$ m9 D( L0 o* @
  66. }
复制代码

编译下载后,可以看到LED3与LED1同时以500ms的频率闪烁。

在终端查看任务,看到led任务在运行中:

/ j% G; _* S4 f, f0 a) h1 r. F8 q

204742dbzbe33bhfuefwz3.png.thumb.png


6 K. w: O$ B7 X" L3 ^

转载自:社区用户:lugl发布


1 M  r" {7 z% Q  h  N3 ^
赞 收藏 评论0 发布时间:2023-1-9 14:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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