|
创建线程是RT_Thread最基本的操作之一。 1、在man.c主程序下面创建静态线程: - /* defined the LED1 pin: PC7 */
5 I4 k: {- h" F9 W1 i: ?6 z- s - /* defined the LED0 pin: PG2 */4 a' H* {# V) J4 _
6 M+ F$ j1 \& [% f* c- #define LED0_PIN GET_PIN(G, 2)
0 P! A" W) M* C( ?( K! N( Y
# _% o" |/ @: z6 e1 `- #define LED1_PIN GET_PIN(C, 7)
( R# r8 C" x; _, x6 y& S - #define THREAD_PRIORITY 25
8 s5 M- j- o- ~" i( J+ r - #define THREAD_STACK_SIZE 512
3 ^: R6 ?3 }! c7 z - #define THREAD_TIMESLICE 5
+ N2 G% p. {3 r4 r% e
$ N- E! |/ p# W2 C; s* K4 M5 q3 @- /* 线程led 的对象和运行时用到的栈 */
6 C' ~: x7 t/ w3 ?+ {. r. g$ X6 E - static struct rt_thread thread_led;$ {* a& N2 u# s; G! {1 s7 w+ Q
- static rt_uint8_t thread_led_stack[512];
2 {( e6 E# W; K* u7 M% e% R$ l - 2 ~: D" c) T |. i/ T
- /* 线程led 入口 */( @# N. N& }! z$ `
- void thread_led_entry(void* parameter)& i X" O( F* o6 H6 {
- {
" `6 ^5 y; `7 ~ - rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);7 E7 O- v! h [2 M
- while(1)
. h# b0 K4 X9 J% y - {" V+ `" x! U# H1 }+ v
- rt_pin_write(LED1_PIN,PIN_HIGH);0 o, f8 x- @7 G# w, V. p+ F9 R
- rt_thread_mdelay(500);3 t) b0 V! K4 x6 f) ~& d7 Q8 W/ d
- rt_pin_write(LED1_PIN, PIN_LOW);
% e- t+ g8 x/ H - rt_thread_mdelay(500);
; [! W! Y/ B: x - }
6 [1 U! s) c% N3 _% C# E5 I& L - }2 ?& T5 Y+ j0 C* n9 ?
- 8 M0 `. `. P$ D8 `7 k
- /* 线程LED1 初始化 */# C/ T2 p: @& k! q5 G) X
- int thread_sample(void)3 Y4 R) T8 D, k9 k% J J; D- y
- {
) X( f/ y; I! d: h, M! R0 G/ H' f6 D - rt_thread_t threadled_ptr;4 O2 T5 t4 T9 _
- rt_err_t result;3 _1 _3 q, t3 d: v, s+ H1 h' a, u
- # W- v3 z/ I2 u! t
- /* ' V; ^2 H4 Q8 G8 N; @! O
- * 初始化 线程LED1
7 |6 n' K) n) j4 ^ l2 ]. f - * 线程的入口是 thread_led_entry, 参数是RT_NULLL
# T( I+ u# x* c6 h& [ - * 线程栈是thread_led_stack! L F% C/ i& N4 Q9 }5 J
- * 优先级是25,时间片是5 OS Tick( Z4 q. D% }) s" a/ }9 \0 h
- $ N3 I! n6 w3 d6 J
- */
) y6 X% Q) S, }% Z0 }* T+ V% p - result = rt_thread_init(&thread_led,
5 J" Q! z1 k1 `/ s - "thread led",* w; b' a# K: B+ K
- thread_led_entry, RT_NULL,
0 J$ y5 _* h- J; [/ j y1 Y& o - &thread_led_stack[0], sizeof(thread_led_stack),
0 N. C: h. c$ T+ d. ^1 c - THREAD_PRIORITY-1,THREAD_TIMESLICE);' S6 S; r2 A: c
- /* 启动线程 */! z- L" H* O0 h& Q+ F3 D% Q- l, b
- if(result == RT_EOK) rt_thread_startup(&thread_led);
+ V2 w0 z! M- s; M0 c9 W7 l8 I - return 0;
& a$ X e: [$ } j: i6 e - }! Z$ P7 K, e7 I) g% ?# ^
( @7 H% q7 p, n- P" C/ ~- int main(void)
1 R- X9 [' O; ~" c - {
( Y. ]5 W' J) O! t- R3 H* a - int count = 1;
3 ?* O& c! u7 ~8 Z' } - /* set LED0 pin mode to output */+ S# M( \% V% U, I1 f, ?. E2 p
- rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);; {6 k9 M7 p" M2 M) U6 C
- thread_sample();
% `+ H' p! ~; s - while (count++)
. ]) z* E4 E% b% _ - {
- k4 n" b. P$ u" ^7 ] - rt_pin_write(LED0_PIN, PIN_HIGH);
% |" ~" c( \/ ~8 i) K5 R: P - rt_thread_mdelay(500);/ u% D# ]. q1 U. H J- @+ K }' H
- rt_pin_write(LED0_PIN, PIN_LOW);& \- ]) m: z6 V2 z5 t
- rt_thread_mdelay(500);' H6 G/ p4 R1 b, z! t1 \/ p* v) N8 d
- }
: d/ f# c; A3 U5 N3 s
& k1 E$ I( p z- return RT_EOK;, j5 O* S$ y$ m9 D( L0 o* @
- }
复制代码编译下载后,可以看到LED3与LED1同时以500ms的频率闪烁。 在终端查看任务,看到led任务在运行中: / j% G; _* S4 f, f0 a) h1 r. F8 q
6 K. w: O$ B7 X" L3 ^转载自:社区用户:lugl发布
1 M r" {7 z% Q h N3 ^ |