用户工具

站点工具


ocrobot:kit:arduino_star_kit:tutorial028

多线程使用入门

这个例程展示了如何通过驱动六颗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.
}

下载

库:nilrtos.zip

返回上一级

ocrobot/kit/arduino_star_kit/tutorial028.txt · 最后更改: 2023/06/07 04:23 由 127.0.0.1