Masuk ke jantung determinisme: memahami deadline dan jitter, membedakan soft dan hard real-time, memilih scheduler RTOS yang tepat, dan menganalisis response time dengan rate monotonic scheduling, ditutup praktik membuat aplikasi real-time yang jitter-nya terukur

Sejauh ini kalian sudah membangun firmware yang "bekerja": task jalan, interrupt menanggapi, data terkirim. Episode ini mengubah pertanyaannya dari "apakah bekerja?" menjadi "apakah selesai tepat waktu?" — dan itu adalah pertanyaan yang membedakan embedded dari software biasa.
Bayangkan airbag mobil: data sensor tabrakan harus diproses dalam hitungan milidetik, selalu, tanpa pengecualian. Terlambat 2 ms berarti keputusan salah — dan itu soal hidup-mati. Inilah dunia real-time systems: bukan soal kecepatan, tapi soal kepastian. Episode ini membangun kemampuan menganalisis dan menjamin perilaku waktu firmware kalian.
Tiga konsep yang membentuk bahasa real-time:
| Konsep | Definisi | Analogi |
|---|---|---|
| Deadline | Batas waktu terakhir sebuah tugas selesai | Janji pengiriman paket hari ini |
| Response time | Waktu dari event sampai respons selesai | Lama kurir sampai pintu |
| Jitter | Variasi response time antar kejadian | Kadang 10 menit, kadang 1 jam |
Determinisme berarti perilaku waktu bisa diprediksi: diberi input yang sama dan kondisi yang sama, waktu eksekusi selalu konsisten. Sistem real-time yang baik bukan yang tercepat — tapi yang jitter-nya terkecil dan deadline-nya terjamin.
Penting membedakan seberapa ketat kebutuhan waktunya:
| Tipe | Deadline terlambat | Contoh |
|---|---|---|
| Hard real-time | Kegagalan = bencana | Airbag, pengatur mesin, defibrilator |
| Firm real-time | Data tidak berguna, tapi tidak membahayakan | Pemrosesan audio/video, flight telemetry |
| Soft real-time | Penurunan kualitas | UI responsif, streaming video |
Imbasnya pada desain: sistem hard real-time butuh analisis matematis dan RTOS dengan scheduling yang terbukti deterministik; sistem soft real-time cukup dengan prioritas dan observasi yang baik. Jangan mendesain hard real-time untuk kebutuhan soft — itu boros dan menyiksa.
RTOS di episode 7 menawarkan scheduling; episode ini membahas pemilihannya. Model paling umum untuk hard real-time: fixed-priority preemptive scheduling — setiap task punya prioritas tetap, dan task berprioritas tinggi selalu mendahului. Di sinilah aturan desain prioritas dibahas tuntas:
Analisis standar untuk memvalidasi: Rate-Monotonic Analysis (RMA) — periksa apakah total "utilisasi" semua task masih di bawah batas yang dapat dijamin schedulable. Untuk 3 task atau lebih, uji sederhananya: jumlahkan rasio (waktu eksekusi / periode) semua task; jika di bawah n(2^(1/n) - 1), scheduling terbukti aman. Detail penuhnya ada di buku real-time; yang harus kalian ingat adalah polanya: deadline ketat → prioritas tinggi → buktikan dengan analisis, bukan keberanian.
Jitter di firmware nyata tidak datang dari kemalasan — datang dari kebiasaan yang tampak tidak berbahaya:
vTaskDelay yang meleset — delay "relatif" menggeser fasa setiap siklus; pakai vTaskDelayUntil untuk periode presisi:const TickType_t period = pdMS_TO_TICKS(10);
TickType_t last_wake = xTaskGetTickCount();
for (;;) {
vTaskDelayUntil(&last_wake, period); /* tunggu sampai deadline periodik */
sample_sensor();
}__attribute__((section(".ramfunc")))).Jitter bukan anomali — ia produk dari semua kebiasaan di atas. Mengukur dan menghilangkannya adalah pekerjaan nyata real-time engineer.
vTaskDelayUntil periode 10 ms.Important
Perangkat lunak real-time yang bagus dibangun dengan bukti, bukan janji. Dokumentasikan deadline tiap task, ukur response time-nya di kondisi terburuk, dan simpan hasilnya di dokumen desain. Ketika sistem gagal di lapangan — dan ia akan gagal — kalian butuh data itu untuk membuktikan di mana batas sebenarnya.
vTaskDelay relatif — jitter periodik yang menumpuk; ganti vTaskDelayUntil.Inti yang harus dibawa pulang:
vTaskDelayUntil, ISR singkat, non-blocking I/O, tanpa malloc.Di episode 15 selanjutnya kita menyimpan data dengan benar: storage & filesystems — flash, LittleFS/FAT, dan wear leveling, dengan praktik membangun sistem penyimpanan di perangkat. Data yang kalian kumpulkan tidak akan berharga jika perangkatnya rusak setelah flash ditulis berulang kali. Sampai jumpa di episode 15!