Matakuliah Tahun Versi : <<Kode>>/<<Nama mtkul>> : <<Tahun Pembuatan>> : <<versi/revisi>> Pertemuan 7 Optimasi Pemrograman C 1 Learning Outcomes Pada akhir pertemuan ini, diharapkan mahasiswa akan mampu : • Melakukan optimasi pemrograman C pada target micro-kontroler atau embedded systems 2 Outline Materi • • • • • Prosessor Arsitektur Const Volatile Array & Static Integer & Register 3 Prosessor Arsitektur 4 Prosessor Arsitektur 8051 5 Prosessor Arsitektur 68HC11/12 RAM CPU ROM/ EPROM EEPROM 68HC11/12 A/D TIMER PARALLEL I/O SPI SCI 6 The 68HC12(11) Registers Accum ulator A A B Accum ulator D D Inde x register X IX Inde x register Y IY Sta ck Pointer SP Pro gra m counter PC S XH IN ZV C Accum ulator B C ondition code register 7 Hirarki Bahasa Pemrograman Komputer Bahasa Mesin merupakan kombinasi angka-angka yang dieksekusi langsung oleh komputer. Sehingga bahasa mesin bersifat unik antar satu prosessor dengan prosessor jenis lainnya. 8 Sistem Pemrograman 9 Istilah-istilah yang digunakan: • Bahasa Mesin • Bahasa Assembly • Assembler: Bahasa Assembly ke bahasa mesin • Compiler: Bahasa Tingkat Tinggi ke bahasa mesin atau assembly. (<- hal ini yang akan di-optimalisasi pada bahasa C) • Linker/Loader 10 • Hardware • Software • Firmware: Software dalam memori (hardware) • • • • Catatan: Kegiatan pemrograman adalah kegiatan mempersiapkan daftar instruksi-instruksi yang akan dieksekusi. Program disimpan pada memori program. Data disimpan pada memori data dan dimanipulasi oleh program. Memori Data dan Program dapat disimpan pada lokasi ic-memori yang sama ataupun berbeda, misalnya ROM untuk memori Program dan RAM untuk memori Data. 11 Const – Volatile Qualifiers • Const dan Volatile tidak saling berhubungan (Const != !Volatile) • Const dan Volatile digolongkan sbg Tipe Qualifier, apa maksudnya? – Qualifier: Memenuhi persyaratan atau standard tertentu, contoh: volatile int k; //volatile adalah sebuah qualifier – Specifiers: Menyatakan tipe data suatu variable, contoh: int k; //int adalah sebuah specifiers 12 Contoh Const + Volatile • • • • • volatile i; volatile int j; const long q; const volatile unsigned long int rt_clk; struct { const long int li; signed char sc; }volatile vs; 13 Const • Const(anta): tidak dapat diubah! • Lalu kapan const var dapat diisi? Saat inisialisasi atau jika const var tersebut mengacu pada port hardware yang berada pada alokasi alamat memori yang tetap. • Const &Objek -> *pointer const OK • Const &Objek -> *pointer non-const NOT_OK 14 Const char c; char *const cp = &c; cp Const pointer c Non Const Variable const char *cp; cp Non Const pointer c Const Variable 15 Volatile • Volatile digunakan pada pemrograman C untuk real-time atau sistem embedded. Mengapa? • Bayangkan suatu alat memiliki 2 buah register dengan panjang 16-bit/register pada alamat yang berurutan. Register pertama adalah register kontrol-status (csr-control status register) dan register kedua adalah register data. Maka cara mengakses kedua register tersebut adl: 16 volatile /* Standard C example but without const or volatile */ /* * Declare the device registers * Whether to use int or short * is implementation dependent */ struct devregs{ unsigned short csr; /* control & status */ unsigned short data; /* data port */ }; /* bit patterns in the csr */ #define ERROR 0x1 #define READY 0x2 #define RESET 0x4 /* absolute address of the device */ #define DEVADDR ((struct devregs *)0xffff0004) /* number of such devices in system */ #define NDEVS 4 /* * Busy-wait function to read a byte from device n. check range of device number. Wait until READY or ERROR * if no error, read byte, return it * otherwise reset error, return 0xffff */ unsigned int read_dev(unsigned devno){ struct devregs *dvp = DEVADDR + devno; if(devno >= NDEVS) return(0xffff); while((dvp->csr & (READY | ERROR)) == 0) ; /* NULL - wait till done */ if(dvp->csr & ERROR){ dvp->csr = RESET; return(0xffff); } return((dvp->data) & 0xff); } 17 Volatile • Volatile digunakan untuk memberi-tahu kompiler bahwa hardware port yang digunakan bersifat volatile: artinya meskipun alamat hardware port tersebut sama, tetapi kompiler C tidak BOLEH melakukan optimasi pada perulangan while() dengan mengkopi hanya satu kali data pada hardware port tersebut. • Sehingga perlu ditambahkan kata “volatile” sebagai berikut: 18 volatile /* Standard C example but without const or volatile */ /* * Declare the device registers * Whether to use int or short * is implementation dependent */ struct devregs{ unsigned short volatile csr; /* control & status */ unsigned short const volatile data; /* data port */ }; /* bit patterns in the csr */ #define ERROR 0x1 #define READY 0x2 #define RESET 0x4 /* absolute address of the device */ #define DEVADDR ((struct devregs *)0xffff0004) /* number of such devices in system */ #define NDEVS 4 /* * Busy-wait function to read a byte from device n. check range of device number. Wait until READY or ERROR * if no error, read byte, return it * otherwise reset error, return 0xffff */ unsigned int read_dev(unsigned devno){ struct devregs *dvp = DEVADDR + devno; if(devno >= NDEVS) return(0xffff); while((dvp->csr & (READY | ERROR)) == 0) ; /* NULL - wait till done */ if(dvp->csr & ERROR){ dvp->csr = RESET; return(0xffff); } return((dvp->data) & 0xff); } 19 Integer & Register • register unsigned int var_name; • Gunakan unsigned int jika diketahui bahwa nilai variabel integer tersebut tidak akan pernah negatif. Karena prosessor menangani variabel unsigned integers lebih cepat daripada variabel integers. • Register berfungsi untuk memastikan bahwa var_name ditempatkan sedekat mungkin dengan prosessor (yaitu: berada pada register). 20 Array & Static Switch: switch ( queue ) { case 0 : letter = 'W'; break; case 1 : letter = 'S'; break; case 2 : letter = 'U'; break; } atau IF: if ( queue == 0 ) letter = 'W'; else if ( queue == 1 ) letter = 'S'; else letter = 'U'; atau static char *classes="WSU"; letter = classes[queue]; 21 Static Static: • Lingkup / Scope lokal variabel, tetapi • nilai variabel bersifat Tetap (preserved) pada saat program keluar dari lingkup fungsi tersebut. 22 Topik Minggu Depan • Concurrent Versions System 1 • Tugas: Mahasiswa mencoba fungsi debugger pada bahasa C untuk Studi Kasus: Konversi data Analog ke data Digital – buku pustaka no:2 halaman 93) • Tugas: Baca buku elektronik berjudul: “Open Source Development with CVS” 23
© Copyright 2024 Paperzz