这个例程展示了如何通过驱动六颗LED让其以不同的速度闪烁来简单学习一下NilRTOS的基本用法
RTOS英文全称Real-Time Operating Systems,中文叫做实时操作系统。 NilRTOS就是这么一个可以运行在OCROBOT控制板中的简单的操作系统。
在NilRTOS中,不能使用标准的delay(),这个会导致操作系统异常。需要使用nilThdSleepMilliseconds来替代delay(),这个需要切记。
#include <NilRTOS.h> int LED_PIN[6] ={ 2,3,4,5,6,7 }; int Delay[6] ={ 100,550,900,2000,2800,1500 }; /*线程1*/ NIL_WORKING_AREA(waThread1, 64); NIL_THREAD(Thread1, arg) { digitalWrite(LED_PIN[0], LOW); while (TRUE) { digitalWrite(LED_PIN[0], HIGH); nilThdSleepMilliseconds(Delay[0]); digitalWrite(LED_PIN[0], LOW); nilThdSleepMilliseconds(Delay[0]); } } /*线程2*/ NIL_WORKING_AREA(waThread2, 64); NIL_THREAD(Thread2, arg) { digitalWrite(LED_PIN[1], LOW); while (TRUE) { digitalWrite(LED_PIN[1], HIGH); nilThdSleepMilliseconds(Delay[1]); digitalWrite(LED_PIN[1], LOW); nilThdSleepMilliseconds(Delay[1]); } } /*线程3*/ NIL_WORKING_AREA(waThread3, 64); NIL_THREAD(Thread3, arg) { digitalWrite(LED_PIN[2], LOW); while (TRUE) { digitalWrite(LED_PIN[2], HIGH); nilThdSleepMilliseconds(Delay[2]); digitalWrite(LED_PIN[2], LOW); nilThdSleepMilliseconds(Delay[2]); } } /*线程4*/ NIL_WORKING_AREA(waThread4, 64); NIL_THREAD(Thread4, arg) { digitalWrite(LED_PIN[3], LOW); while (TRUE) { digitalWrite(LED_PIN[3], HIGH); nilThdSleepMilliseconds(Delay[3]); digitalWrite(LED_PIN[3], LOW); nilThdSleepMilliseconds(Delay[3]); } } /*线程5*/ NIL_WORKING_AREA(waThread5, 64); NIL_THREAD(Thread5, arg) { digitalWrite(LED_PIN[4], LOW); while (TRUE) { digitalWrite(LED_PIN[4], HIGH); nilThdSleepMilliseconds(Delay[4]); digitalWrite(LED_PIN[4], LOW); nilThdSleepMilliseconds(Delay[4]); } } /*线程6*/ NIL_WORKING_AREA(waThread6, 64); NIL_THREAD(Thread6, arg) { digitalWrite(LED_PIN[5], LOW); while (TRUE) { digitalWrite(LED_PIN[5], HIGH); nilThdSleepMilliseconds(Delay[5]); digitalWrite(LED_PIN[5], LOW); nilThdSleepMilliseconds(Delay[5]); } } /*线程列表*/ NIL_THREADS_TABLE_BEGIN() NIL_THREADS_TABLE_ENTRY("thread1", Thread1, NULL, waThread1, sizeof(waThread1)) NIL_THREADS_TABLE_ENTRY("thread2", Thread2, NULL, waThread2, sizeof(waThread2)) NIL_THREADS_TABLE_ENTRY("thread3", Thread3, NULL, waThread3, sizeof(waThread3)) NIL_THREADS_TABLE_ENTRY("thread4", Thread4, NULL, waThread4, sizeof(waThread4)) NIL_THREADS_TABLE_ENTRY("thread5", Thread5, NULL, waThread5, sizeof(waThread5)) NIL_THREADS_TABLE_ENTRY("thread6", Thread6, NULL, waThread6, sizeof(waThread6)) NIL_THREADS_TABLE_END() void setup() { for( int i = 0;i< 6; i++ ) { pinMode(LED_PIN[i],OUTPUT); } // Start Nil RTOS. nilSysBegin(); } void loop() { // Not used. }
XNzE4ODM0ODcy