Praktek Real Time Operation System (RTOS) Menggunakan Arduino - TeachMeSoft

Praktek Real Time Operation System (RTOS) Menggunakan Arduino

Praktek Real Time Operation System (RTOS) Menggunakan Arduino


Teori Singkat


RTOS atau system operasi waktu nyata adalah sebuah system operasi yang dirancang untuk melayani beberapa tugas pemrosesan data masuk/keluar secara real-time tanpa penundaan, dikenal dengan istilah multi-tasking.

Umumnya system operasi ini dijalankan pada platform system benam (embedded system). Pada dasarnya sebuah microprocessor core tidak mampu mengerjakan beberapa tugas secara bersama (concurent) karena memang sifat eksekusi perintah adalah berurutan (sequence).

Kelemahan dari metode sekuensial tradisional adalah waktu tunda eksekusi suatu program karenan menunggu eksekusi program lain yang belum selesi. Jika terdapat banya program yang harus dilakukan oleh microprocessor maka konsep sekuensial model ini sudah tidak bisa andalkan.

RTOS hadir dengan kernel real-time scheduler yagn akan menjadwal eksekusi beberapa pekerjaan secara bergiliran dengan kecepatan tinggi sehingga terkesan adanya eksekusi suatu program secara simultan meskipin kenyataanya program tersebut mengalami jeda eksekusi beberapa kali karena microprocessor mengeksekusi program lain.

RTOS pada sebuah system benam tidak menjalankan pemrosesan secara parallel karena memang arsitekstur system benam tidak mendukungnya, namun dengan melakukan penjadwalan eksekusi dari beberapa pekerjaan maka pekerjaan-pekerjaan tersebut dapat diselesaikan seolah-olah tanpa jeda.

Prinsip kerja dari scheduler RTOS adalah membagi slot waktu eksekusi (tick time) untuk tiap-tiap program dari beberapa program yang dijalankan. Gambar 1 mendeskripsikan prinsip kerja sebuah scheduler RTOS yang menjadwalkan eksekusi setiap program oleh CPU bergilir secara cepat.

Prinsip kerja scheduler RTOS
Gambar 1. Prinsip kerja scheduler RTOS

Setiap program yang dijadwalkan oleh scheduler untuk dieksekusi diberikan prioritas dari HIGH ke LOW, hal ini tersebut untuk menentukan pola penggiliran sesuai denga prioritassnya disapmping menjalankan penjadwalan, RTOS juga menerima permintaan interupsi baik dari perangkat keras maupun dari perangkat lunak yang meminta layanan. Illustrasi penggiliran RTOS dan pelayanan interupsi dapat dilihat pada Gambar 2 dibawah ini.
Pola penjadwalan RTOS terhadap Task dan Interrupt
Gambar 2. Pola penjadwalan RTOS terhadap Task dan Interrupt

Terdapat banyak RTOS yang sudah dirancang untuk diterapkan pada system benam, seperti FreeRTOS. Beberapa orang telah melakukan porting freeRTOS agar dapat diterapkan pada system benam berbasi Arduino, yaitu menyesuiakan Resource MCU (microcontroller unit) yang digunakan oleh arduino agar mampu menjadwalkan freeRTOS dengan baik dan effisien ditinjau dari penggunaan ruang memory ROM dan RAM (footprint) oleh kernel freeRTOS.


Alat dan Bahan Percobaan


Pada sesi ini akan diperkenalkan tentang cara menggunakan RTOS untuk menjalankan beberapa fungsi secara bersamaan. Adapun alat dan bahan yang digunakan selama percobaan adalah :
  1. 3 buah LED (light emitting diode)
    Bahan percobaan yang berfungsi sebagai indicator proses secara visual.
  2. Papan Arduino UNO
    Bahan percobaan sebagai piranti digital utama untuk menguji kinerja RTOS.


Langkah Percobaan



Percobaan penerapan RTOS pada papan Arduino melibatkan dua aktivitas yaitu perancangan antarmuka perangkat keras dan pemrograman perangkat lunak. Adapun langkah percobaan nya adalah sebgai berikut :
  1. Disain antarmuka perangkat keras
    Percobaan menghubungkan papan Arduino UNO dengan indicator LED. Gambar 3 menunjukkan antarmuka perangkat keras sebagai percobaan.
    Antarmuka Papan Arduino Uno dengan 3 buah LED
    Gambar 3. Antarmuka Papan Arduino Uno dengan 3 buah LED
  2. Pemrograman perangkat lunak
    Percobaan yang akan dilakukan adalah menerapkan RTOS pada papan Arduino untuk menghidupkan-matikan tiga LED dengan frekwensi yang berbeda. Berikut ini contoh kode program harus anda buat untuk menguji performa RTOS dengan menggunakn Library : Arduino_FreeRTOS.h
    #include <Arduino_FreeRTOS.h>
    #include <semphr.h>

    #define LED1 8
    #define LED2 9
    #define LED3 10

    SemaphoreHand1e_t xSerialSemaphore;

    void Task LEDI (void *pvParameters);
    void Task LED2 (void *pvParameters);
    void Task LED3 (void *pvParameters);

    vola setup(){
    Serial.begin(9600);
    if(xSerialSemaphore == NULL){
    xSerialSemaphore = xSemaphoreCreateMutex();
    if((xSerialSemaphore)!= NULL)
    xSemaphoreGive((xSerialSemaphore));
    }
    xTaskCreate(Task_LED1, (const portCHAR*)"T1",128 ,NULL 1,NULL);
    xTaskCreate(Task_LED2, (const portCHAR*)"T2",128 ,NULL 1,NULL);
    xTaskCreate(Task_LED3, (const portCHAR*)"T3",128 ,NULL 1,NULL);
    }

    void Loop(){}
    void Task_LED1(void*pvParameters_attribute_((unused))){
    pinMode(LED1, OUTPUT);
    for(;;){
    digitalWrite(LED1,!digitaLRead(LED1));
    vTaskDeIay(30);
    }
    }

    void Task_LED2(void*pvParameters_attribute_((unused))){
    pinMode(LED2, OUTPUT);
    for(;;){
    digitalWrite(LED2,!digitaLRead(LED2));
    vTaskDeIay(60);
    }
    }

    void Task_LED3(void*pvParameters_attribute_((unused))){
    pinMode(LED2, OUTPUT);
    for(;;){
    digitalWrite(LED3,!digitaLRead(LED3));
    vTaskDeIay(90);
    }
    }
    ketik contoh kode program diatas, kompilasi dan upload ke papan Arduino. Kemudian lakukan pengamtan secara visual dan simpulkan.


Tugas


Berikut ini deskripsi tugas yang harus anda lakukan terkait dengan tahapan-tahap percobaan yang sudah dilakukan :
  1. Membuat aplikasi multi-tasking berisi program menyala 3 buah LED dengan pola nyala yang berbeda-beda, dan program pengirim data serial secara periodic. Sehingga terdaat 4 tugas yagn harus dijalankan oleh Arduino secara bersama-sama.
  2. Kompilasi dan Upload kode program yang sudah anda buat, kemudian amati hasilnya.
  3. Membuat laporan percobaan yang berisi foto antarmuka perangkat keras dan kode program yang berhasil dibuat dan berjalan dengan benar.




Disqus comments