Selasa, 07 Agustus 2007

Pengantar Embedded Systems dan Realtime Systems dengan Embedded Linux dan eCos

Apakah embedded system itu ?


Embedded system adalah kombinasi dari hardware dan software yang disisipkan (embedded) dalam suatu perangkat tertentu yang bertujuan melakukan suatu fungsi/tugas khusus.


Contoh dari embedded systems ini dalam kehidupan sehari-hari adalah microwave, kalkulator elektronic, game watch, Antilock Brake Systems dan masih banyak lagi. Hampir semua aspek kehidupan kita tidak dapat dipisahkan dari embedded systems.

Coba anda lihat sekeliling kamar anda, pastinya anda tidak akan sulit menemukan suatu benda yang mengandung embedded systems di dalamnya. Coba sebutkan, di kamar saya saja sekarang ada Mobile Phone, MP3 Player dan MIDI Keyboard.


Embedded systems banyak dikaitkan dengan Real-Time Systems (sistem waktu nyata).

Kebanyakan Embedded system memang memiliki sistem operasi berbasis real-time systems, kenapa ? karena kita tidak ingin ada jeda waktu eksekusi dalam sistem embedded systems.


Embedded system juga banyak dikaitkan dengan Instrumentasi. Karena untuk membuat instrument, kita menghubungkan (antarmuka/interface) antara prosesor dengan dunia luar melalui sensor.


Dalam blog ini penulis akan mengajak pembaca untuk membangun sistem embedded system dengan sistem operasi yang sudah terkenal yaitu Linux, khususnya embedded Linux. Pembaca sudah seharusnya menguasai bahasa pemrograman C, dasar-dasar sistem digital dan Organisasi dan Arsitektur sistem komputer.


Untuk board experimen, penulis menyarankan untuk menggunakan Microcontroller kit Arcom Viper-Lite dengan processor Arm PXA255 XScale. Microcontroller kit ini dapat dibeli lewat www.arcom.com dengan harga sekitar 360 euro saja. Belajar microcontroller memang butuh modal, penulis sengaja tidak menyarankan Pic Microcontroller atau 8051 karena keterbatasan feature.


Menurut penulis, Microcontroller Viper-Lite ini paling lengkap dan memiliki feature sebagai berikut:

  • RAM: 64 MB of SDRAM
  • ROM: 16 MB of flash and 1 MB boot ROM
  • Three RS232-compatible serial ports (with external DB9 connectors)
  • 10/100baseTx Ethernet port
  • USB v1.1 client port
  • CompactFlash slot
  • Four programmable timer/counters
  • Sixteen-channel DMA controller
  • Watchdog timer
  • Real-time clock
  • Eight buffered digital inputs
  • Eight buffered digital outputs
  • RedBoot debug monitor program resident in boot ROM
  • Embedded Linux (based on kernel version 2.6) resident in flash


Dengan demikian, kita bisa belajar banyak hal, mulai dari port access hingga ke networking.


Prosesor dan memori


Sekarang kita akan mempelajari mengenai dasar-dasar Prosesor:

Ada dua jenis perangkat keras yang membentuk Prosesor : memory dan periferal. Memory untuk penyimpanan/temu kembali data dan kode. Sementara periferal adalah perangkat keras yang mengkoordinasikan interaksi dengan dunia luar atau melakukan suatu fungsi hardware tertentu. Contoh periferal pada embedded system adalah port serial dan timer.

Keluarga prosesor berbasis Intel 80x86 memiliki dua sistem pengalamatan yang memungkinkan komunikasi dengan memori dan periferal. Sistem pengalamatan pertama diperuntukkan bagi perangkat memory, sementara sistem pengalamatan kedua diperuntukkan bagi periferal terutama I/O.

Pemetaan memory

Semua prosesor menyimpan data dan program di memory. Memory bisa terletak di dalam chip yang sama dengan prosesor atau diluar chip. Memory terletak pada memory space dan prosesor berkomunikasi dengan memory dengan menggunakan dua jalur yaitu address bus dan data bus. Address bus untuk menyimpan alamat dan data bus untuk menyimpan data. Selain itu ada jalur lain, yaitu control bus yang dipergunakan untuk membaca , menulis dan mengaktifkan ke berbagai perangkat didalam ruang lingkup pengalamatan memory. Sinyal untuk control bus termasuk : read, write dan chip-select (chip-enable).


Saat kita akan menulis suatu program pada suatu board, sebaiknya kita baca dulu spesifikasi board tersebut, sehingga kita bisa tahun nama dan address range dari tiap perangkat memori dan periferal yang terletak pada ruang memory. Kita buat tabelnya. Tabel ini kita sebut peta memory (memory map). Tabel tersebut diorganisasikan sedemikian rupa sehingga alamat terkecil terletak paling bawah dan alamat tertinggi terletak di atas. Setiap kali kita menambahkan suatu perangkat ke peta memory, tempatkan pada lokasi yang benar dan beri label pada alamat awal dan akhir dalam hexadecimal.

Sebagai contoh bila kita lihat diagram pada Arcom board dibawah ini maka kita lihat bahwa ada tiga perangkat yang terhubung pada address dan data bus, perangkat tersebut adalah RAM, ROM dan SMSC Ethernet controller.


Peta memory dari diagram diatas kira-kira sebagai berikut (gambar hak cipta Michael Barr):

Setelah kita membuat peta memory, kita buat header pada bahasa C sebagai berikut :

/**********************************************************************

*

* Peta memory

*

* Base Address Ukuran Deskripsi

* -------------- ----- -----------------------------------

* 0x00000000 64M SDRAM

* 0x08000300 N/A Ethernet controller

* 0x50000000 16M Flash

*

**********************************************************************/

#define SDRAM_BASE (0x00000000) // definisi SDRAM

#define ETHERNET_BASE (0x08000300) // definisi Ethernet

#define FLASH_BASE (0x50000000) // Flash

Setelah kita mengetahui nama dan alamat memori dan peripheral yang terhubung dengan prosesor, maka kita bisa membuat mereka berkomunikasi antara satu dengan lainnya (prosesor dengan peripheral). Ada dua metode komunikasi yaitu polling dan interrupt. Keduanya berbasis pada konsep ini, prosesor akan tahu alamat dan range periferal, prosesor akan memberikan tugas (berupa data) pada alamat tersebut, dan prosesor akan menunggu periferal menyelesaikan tugasnya. Contoh, ketika prosesor menugaskan timer menghitung dari 1000 ke 0. Pada detik dimana kalkulasi dimulai, prosesor hanya akan tertarik pada satu hal, apakah timer selesai menghitung atau tidak.

Pada metode polling, prosesor akan menanyakan terus menerus pada peripheral (misal timer) apakah suatu tugas selesai dikerjakan atau tidak. Untuk mengimplementasikan polling, maka kita akan menciptakan iterasi yang membaca status register pada peripheral. Sebagai contoh :

do

{

/* Hitung dari 1000 ke 0 */

...

/* Poll untuk melihat apakah perhitungan selesai. */

status = Nilai_Sudah_Nol( );

} while (status == NO);

Metode komunikasi kedua adalah interrupt,interrupt adalah sinyal elektrik asinkronus dari peripheral ke prosesor. Pada interrupt, prosesor memberikan tugas pada peripheral seperti sebelumnnya, hanya saja, sekarang peripheral yang akan memberikan sinyal pada prosesor apakah tugas sudah selesai atau belum. So perbedaannya dengan polling adalah prosesor tidak terus menerus menanyakan status dari peripheral tapi peripheral yang akan memberitahukan statusnya sekarang (menginterupsi prosesor). Dengan metode interrupt, sementara menunggu peripheral menyelesaikan tugasnya, prosesor dapat melakukan instruksi-instruksi lain.

Jika peripheral memberikan sinyal interupsi pada prosesor , maka prosesor akan menyelesaikan instruksi yang sedang dikerjakannya sekarang, kemudian menyimpan semua state pada instruksi yang sedang dikerjakannya saat ini, kemudian mengekskusi suatu rutin yang dinamakan interrupt service routine (ISR) atau interrupt handler, anda sebagai programmer embedded system yang akan membuat ISR ini. Saat ISR selesai, maka prosesor kembali ke state sebelum interupsi. Kelebihan interrupt adalah interrupt lebih menghemat resource dibandingkan polling, tapi kekurangannya adalah interrupt memiliki jeda waktu (overhead) yang lebih lama dibanding polling.

Dalam prakteknya, polling dan interrupt sama-sama sering dipakai, polling untuk periferal yang membutuhan kecepatan dan interrupt untuk efisiensi prosesor.

Mengenal databook/datasheet prosesor

Bagi anda-anda yang belum terbiasa dengan embedded system programming, anda harus mulai mengenal makhluk satu ini, databook atau datasheet. Pada databook semua data penting mengenai periferal dan prosesor akan diberikan. Tiap prosesor akan berisi data yang berbeda sesuai arsitektur dari register dan instruction set. Semua yang ingin kita ketahui pada prosesor dapat kita temui pada databook.



View Adhiguna Mahendra,Ph.D's profile on LinkedIn