% D& X2 j/ D4 f+ B; C$ J- #include <Arduino.h>7 m9 |" y/ |5 h' S8 ?" ]" ~: l! m9 P/ |
- #include <STM32FreeRTOS.h> //引和freertos库1 \7 e+ i2 y; A5 Z2 r. S. V1 e
" s% e# }; N7 {& Q0 D3 I- #ifndef LED_BUILTIN
/ W2 d L/ ]" x - #define LED_BUILTIN PC59 m) n" ]- ~: y5 M: w8 E+ L
- #endif
+ V/ m2 B9 v* b! }2 g
; s1 g: a9 \. G( B O: o$ b8 c& _- /*********************************************************************************# `0 `6 ~! R0 y' R" l8 x
- * @ 函数名 : vTaskLed1
9 V3 T' m& r9 m - * @ 功能说明: LED1 任务,实现一个周期性的闪烁
) u& |* K, n0 e6 T$ a5 ` - * @ 参数 : pvParameters,当任务创建的时候传进来,可以没有
/ H1 X# ^, N% _+ X O - * @ 返回值 : 无, F; N/ m7 h1 L- Y* m! L
- ********************************************************************************/$ E5 s) q; x* F$ X- Z* a' z* r2 U# V
- void vTaskLed1(void *pvParameters)
0 }; B# T& p6 c$ ^ - {
) }( e3 @4 n) ]) Z - /* 任务都是一个无限,不能返回 */
* a! m5 U. R8 {& ^ - while(1)
3 {+ A5 [3 a- i/ [7 R4 s - {2 K9 B6 F% p6 Z7 J9 B; y: c
- digitalWrite(LED_BUILTIN, HIGH);;
6 x( f& t& B. T2 Q. V2 b - /* 阻塞延时,单位ms */
9 j- I9 J7 P& d' T+ ~! ^" X7 y - vTaskDelay( 500 );
0 P( [6 ?5 K2 Q8 v8 C$ Q9 k - digitalWrite(LED_BUILTIN, LOW);;
& O. b1 D1 r' d9 c0 z) c7 y3 w - vTaskDelay( 500 );* z2 z8 l7 U# x. d2 W" C
- long tick = xTaskGetTickCount();0 {- v6 i _2 F9 E; \% n% N
- Serial.print("running time = ");0 f4 z; b" i* `5 |* O- J& r
- Serial.println(tick);
8 {. z2 }3 _0 T - } ! [7 |. A6 u9 C' ?
- }
$ |, V8 H& ?/ K* {" T5 g - void setup()9 W0 O9 f! {; b0 k0 ^4 B
- {
/ R0 L, v/ o4 [8 P. R! \, j - Serial.begin(115200);
# Q G% c! ]+ F5 `0 n4 I0 P - // initialize LED digital pin as an output.% B$ N( _7 D: ] ], @4 o
- pinMode(LED_BUILTIN, OUTPUT);
7 k, z7 N% q( Q M t1 L6 Z- m - Serial.println("start U575");; t3 s8 y. w. f* O5 L* n( T/ H
- TaskHandle_t myTask1; //创建任务句柄
* o1 { C# K' O5 _7 |, c/ z7 X( u* Z* Z8 m - xTaskCreate(vTaskLed1, //创建任务
, P4 e) o4 j' f7 U+ |7 t - "Led task",
3 O o. a' u$ N H+ X; O. x - 1024,
, n8 X. s# a+ p1 i! n- U; u - NULL,) c! w4 h4 ?! y' C# F. i
- 6,
$ H2 c$ z6 ~ L$ x: d8 a# I5 A" k - &myTask1);9 G- Z4 \2 m. j: a5 f+ r
- // 开启任务' M; o2 w1 g; O! d
- vTaskStartScheduler();
% c0 A! l p3 S, P - }6 ]2 ^3 ?+ B- a5 v; R
6 s2 o! w2 _7 l- void loop()6 i$ m% v4 J3 n) l6 `5 Z
- {7 ^/ @' y) G8 I+ m" r% R0 l
-
! B4 Y9 N/ ^3 Y* l* I' X1 @1 s2 y - }
复制代码
; @0 {/ j( d7 v% `8 G1 V% J) s
, G' Y7 k2 n2 _' s$ w# _1 z. L如上,开启FreeRTos。
' B) f3 f% b; f r8 a u
+ _% s4 X* p/ j2 D
% Y% Y# J2 G: b( E7 s6 ~6 v效果:
+ W4 D h+ P0 G: A$ Y5 e V+ ]7 p
- A( m t4 y' Z
+ P5 m& {4 |5 K6 d2 p
; i- J! @ V6 v% [. A. Q' v
! H: x+ d. f2 z" D) q( W
; L( F# q( J& v3 c" Q* L
第一个任务就成功了,给arduino点个赞吧。下一集,开启多任务系统。+ U9 V6 @1 Z. N( v6 m( S* O5 _1 N
_3 s/ @4 l0 n9 w
& i. R* F3 j3 j C
) ` H3 {( H4 I2 s |