ocrobot:kit:arduino_star_kit:tutorial028
差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
| ocrobot:kit:arduino_star_kit:tutorial028 [2017/04/07 10:03] – 外部编辑 127.0.0.1 | ocrobot:kit:arduino_star_kit:tutorial028 [2025/10/11 02:55] (当前版本) – 外部编辑 127.0.0.1 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | ======多线程使用入门====== | ||
| + | <WRAP center round info 100%> | ||
| + | 这个例程展示了如何通过驱动六颗LED让其以不同的速度闪烁来简单学习一下NilRTOS的基本用法 | ||
| + | </ | ||
| + | RTOS英文全称Real-Time Operating Systems,中文叫做实时操作系统。 | ||
| + | NilRTOS就是这么一个可以运行在OCROBOT控制板中的简单的操作系统。 | ||
| + | |||
| + | 在NilRTOS中,不能使用标准的delay(),这个会导致操作系统异常。需要使用nilThdSleepMilliseconds来替代delay(),这个需要切记。 | ||
| + | |||
| + | =====搭建电路===== | ||
| + | {{: | ||
| + | =====代码===== | ||
| + | <code cpp> | ||
| + | #include < | ||
| + | |||
| + | int LED_PIN[6] ={ 2,3,4,5,6,7 }; | ||
| + | int Delay[6] ={ 100, | ||
| + | /*线程1*/ | ||
| + | NIL_WORKING_AREA(waThread1, | ||
| + | NIL_THREAD(Thread1, | ||
| + | digitalWrite(LED_PIN[0], | ||
| + | while (TRUE) { | ||
| + | digitalWrite(LED_PIN[0], | ||
| + | nilThdSleepMilliseconds(Delay[0]); | ||
| + | digitalWrite(LED_PIN[0], | ||
| + | nilThdSleepMilliseconds(Delay[0]); | ||
| + | } | ||
| + | } | ||
| + | /*线程2*/ | ||
| + | NIL_WORKING_AREA(waThread2, | ||
| + | NIL_THREAD(Thread2, | ||
| + | digitalWrite(LED_PIN[1], | ||
| + | while (TRUE) { | ||
| + | digitalWrite(LED_PIN[1], | ||
| + | nilThdSleepMilliseconds(Delay[1]); | ||
| + | digitalWrite(LED_PIN[1], | ||
| + | nilThdSleepMilliseconds(Delay[1]); | ||
| + | } | ||
| + | } | ||
| + | /*线程3*/ | ||
| + | NIL_WORKING_AREA(waThread3, | ||
| + | NIL_THREAD(Thread3, | ||
| + | digitalWrite(LED_PIN[2], | ||
| + | while (TRUE) { | ||
| + | digitalWrite(LED_PIN[2], | ||
| + | nilThdSleepMilliseconds(Delay[2]); | ||
| + | digitalWrite(LED_PIN[2], | ||
| + | nilThdSleepMilliseconds(Delay[2]); | ||
| + | } | ||
| + | } | ||
| + | /*线程4*/ | ||
| + | NIL_WORKING_AREA(waThread4, | ||
| + | NIL_THREAD(Thread4, | ||
| + | digitalWrite(LED_PIN[3], | ||
| + | while (TRUE) { | ||
| + | digitalWrite(LED_PIN[3], | ||
| + | nilThdSleepMilliseconds(Delay[3]); | ||
| + | digitalWrite(LED_PIN[3], | ||
| + | nilThdSleepMilliseconds(Delay[3]); | ||
| + | } | ||
| + | } | ||
| + | /*线程5*/ | ||
| + | NIL_WORKING_AREA(waThread5, | ||
| + | NIL_THREAD(Thread5, | ||
| + | digitalWrite(LED_PIN[4], | ||
| + | while (TRUE) { | ||
| + | digitalWrite(LED_PIN[4], | ||
| + | nilThdSleepMilliseconds(Delay[4]); | ||
| + | digitalWrite(LED_PIN[4], | ||
| + | nilThdSleepMilliseconds(Delay[4]); | ||
| + | } | ||
| + | } | ||
| + | /*线程6*/ | ||
| + | NIL_WORKING_AREA(waThread6, | ||
| + | NIL_THREAD(Thread6, | ||
| + | digitalWrite(LED_PIN[5], | ||
| + | while (TRUE) { | ||
| + | digitalWrite(LED_PIN[5], | ||
| + | nilThdSleepMilliseconds(Delay[5]); | ||
| + | digitalWrite(LED_PIN[5], | ||
| + | nilThdSleepMilliseconds(Delay[5]); | ||
| + | } | ||
| + | } | ||
| + | / | ||
| + | NIL_THREADS_TABLE_BEGIN() | ||
| + | NIL_THREADS_TABLE_ENTRY(" | ||
| + | NIL_THREADS_TABLE_ENTRY(" | ||
| + | NIL_THREADS_TABLE_ENTRY(" | ||
| + | NIL_THREADS_TABLE_ENTRY(" | ||
| + | NIL_THREADS_TABLE_ENTRY(" | ||
| + | NIL_THREADS_TABLE_ENTRY(" | ||
| + | NIL_THREADS_TABLE_END() | ||
| + | |||
| + | void setup() { | ||
| + | for( int i = 0;i< 6; i++ ) | ||
| + | { | ||
| + | pinMode(LED_PIN[i], | ||
| + | } | ||
| + | // Start Nil RTOS. | ||
| + | nilSysBegin(); | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | // Not used. | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | {{youku> | ||
| + | <WRAP center round download 100%> | ||
| + | =====下载===== | ||
| + | 库:{{: | ||
| + | </ | ||
| + | |||
| + | |||
| + | [[ocrobot: | ||
