download

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