December 5, 2021

Blogna Kang U-2 Man

STM32, Embedded System, Microcontroller, ARM Cortex-M, RTOS, FreeRTOS

Bermain-main dengan FreeRTOS (Bagian 2): Mengapa Menggunakan RTOS?

4 min read

بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيم

Teknik pemrograman di mikrokontroler yang paling umum digunakan adalah teknik Super Loop, di mana program akan melakukan perulangan (loop) secara terus-menerus di fungsi main. Pekerjaan yang harus dikerjakan oleh program (sebut saja task) biasanya akan dibuat sebagai fungsi-fungsi (sub-rutin). Fungsi main kemudian akan memanggil fungsi-fungsi tersebut secara berurutan (sekuensial).

Misalkan kita menginginkan Fungsi1 dikerjakan setiap 50 milidetik, Fungsi2 setiap 100 milidetik, Fungsi3 setiap 10 milidetik dan Fungsi4 dikerjakan setiap 1 detik. Kita tidak bisa memasukan fungsi delay di setiap fungsi karena pewaktuannya akan menjadi kacau. Oleh karena itu teknik blink without delay bisa digunakan.

Teknik lain yang juga umum digunakan adalah dengan menggabungkannya dengan interupsi. Misal untuk membaca tombol dilakukan melalui interupsi. Sehingga mikrokontroler hanya akan membaca tombol jika tombol itu benar-benar ditekan, saat tombol tidak ditekan, mikrokontroler akan menggunakan waktunya untuk mengerjakan fungsi lain, tidak membuang waktu untuk membaca tombol yang tidak ditekan.

Dengan teknik without delay maka di pernyataan while programnya akan menjadi seperti ini

Teknik di atas hanya akan berjalan lancar kalau setiap fungsi dikerjakan tidak melebihi waktu tertentu, yaitu interval terkecil dari setiap fungsi. Dalam contoh program di atas adalah 10 milidetik (Fungsi3). Misal Fungsi4 akan mengalami timeout selama 50 milidetik, karena Fungsi4 bertugas membaca sensor modbus yang mungkin baru memberikan data 50 milidetik kemudian setelah diberi perintah pembacaan register modbus. Jika Fungsi4 selalu dikerjakan selama 50 milidetik, maka interval Fungsi3 tidak akan 10 milidetik, tetapi menjadi setiap 50 milidetik. Fungsi1 yang intervalnya 50 milidetik, mungkin juga menjadi terpengaruh.

RTOS dirancang untuk mengatasi permasalahan tersebut. Seperti telah dijelaskan di artikel pertama, RTOS akan menjaga setiap task atau fungsi dikerjakan dalam waktu/interval yang sama. Dengan RTOS, Fungsi1, Fungsi2, Fungsi3 dan Fungsi4 bisa konsisten dengan interval yang telah ditentukan. Walaupun misalnya Fungsi4 dikerjakan selama 50 milidetik tidak akan mempengaruhi Fungsi3, artinya Fungsi3 akan tetap dikerjakan setiap 10 milidetik.

MULTI-TASKING

Kemampuan kernel RTOS untuk membuat mikrokontroler seolah-olah bisa mengerjakan banyak task dalam waktu yang bersamaan, menjadi alasan pertama penggunaan RTOS. Sebuah aplikasi yang mengerjakan banyak task dan harus merespon sistem secara real time, lebih mudah apabila menggunakan RTOS. Ya walaupun teknik super loop mungkin bisa juga, tetapi dengan alasan di paragraf sebelumnya, programnya mungkin akan menjadi lebih rumit. Terutama ketika ada penambahan fungsi di program, mungkin kita juga harus meninjau fungsi-fungsi yang sudah ada, agar pewaktuannya tetap terjaga. Di RTOS, penambahan task bisa dilakukan dengan mudah, tanpa perlu meninjau task lain yang sudah jalan. Kecuali kalau task baru tersebut berhubungan dengan task lain, maka harus menggunakan teknik inter-task communication misal menggunakan semaphore, mutex, atau queue.

Perhatikan video berikut.

Video menunjukan program mengendalikan 4 buah LED, LED hijau berkedip setiap 50 milidetik, LED merah setiap 1 detik, LED biru setiap 100 milidetik, dan LED oranye berkedip setiap 100 milidetik. DI video terlihat bahwa LED berkedip secara masing-masing (berbarengan sesuai intervalnya masing-masing. Apakah programnya menggunakan RTOS?

Programnya menggunakan teknik blink without delay. Cobalah utak-atik programnya, misal tambah delay, terus lihat apakah kecepatan LEDnya berubah?

EFISIENSI CPU

Di program mikrokontroler, seringkali atau dipastikan akan menggunakan fungsi delay, sebagai contoh ketika mengendalikan modem, maka mikrokontroler harus menunggu beberapa saat (mungkin sampai beberapa ratus milidetik atau bahkan lebih saat menggunakan fungsi TCP/IP) sebelum mendapat jawaban setelah mengirimkan AT Command. Saat menunggu ini biasanya program akan menggunakan fungsi delay. Saat menunggu tersebut, CPU akan benar-benar menunggu sampai timeout. Akibatnya, fungsi lain akan terhenti (terblok) dan pastinya akan mempengaruhi pewaktuan.

Di RTOS, saat menunggu tersebut, CPU bisa digunakan untuk mengerjakan fungsi/task yang lain. Sehingga pewaktuan secara keseleuruhan tidak akan terpengaruh. Selain itu, ketika terjadi peralihan ke task lain (context switch), CPU menjadi lebih efisien karena dia memberikan waktunya untuk mengerjakan task lain dari pada hanya melakukan hitungan di fungsi delay.

DUKUNGAN MIDDLEWARE

Kernal RTOS, terutama untuk RTOS yang berbayar, biasanya dibuat juga dengan middleware yang lain seperti sistem file (FAT), USB, TCP/IP, GUI dan lain-lain. Jadi lebih memudahkan integrasi saat pengembangan tanpa harus dipusingkan untuk integrasi jika RTOS dan middleware yang digunakan berbeda.

DUKUNGAN HARDWARE

Perkembangan di mikrokontroler juga mendukung penggunaan RTOS di program sistem embedded. Mikrokontroler sekarang dibuat lebih cepat (sampai order GHz) dengan memori lebih besar. Seperti diketahui RTOS memerlukan kecepatan prosesor yang cukup tinggi (agar context switch bisa dibuat lebih cepat) dan memori yang besar, sehingga bisa menjalankan task yang lebih banyak.

Demikian alasan-alasan mengapa digunakan RTOS. Semoga bermanfaat.

Visits: 5 Visits: 97961

1 thought on “Bermain-main dengan FreeRTOS (Bagian 2): Mengapa Menggunakan RTOS?

Leave a Reply

Your email address will not be published. Required fields are marked *

Copyright © All rights reserved. | Newsphere by AF themes.