NS.One RTOS Blink LED

Berikut adalah sebuah contoh aplikasi blink LED dimana penyalaan LED dilakukan pada thread#2 sementara pemadaman LED dilakukan pada thread#1. Agar tidak terjadi tabrakan ketika menyalakan dan memadamkan LED, kita gunakan teknik semaphore.

#include <ChibiOS_AVR.h>

SEMAPHORE_DECL(sem, 0);

static WORKING_AREA(waThread1, 64);
static msg_t Thread1(void *arg) {

  while (!chThdShouldTerminate()) {
    chSemWait(&sem);
    digitalWrite(21, LOW);
  }
  return 0;
}

static WORKING_AREA(waThread2, 64);
static msg_t Thread2(void *arg) {
  pinMode(21, OUTPUT);
  while (1) {
    digitalWrite(21, HIGH);
    chThdSleepMilliseconds(200);
    chSemSignal(&sem);
    chThdSleepMilliseconds(200);
  }
  return 0;  
}

void setup() {

  chBegin(chSetup);
  while(1) {}
}

void chSetup() {

  chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO + 2, Thread1, NULL);
  chThdCreateStatic(waThread2, sizeof(waThread2), NORMALPRIO + 1, Thread2, NULL);

}

void loop() {
  // tidak digunakan
}