Pengaruh Struktur Pemrograman Dan Compil
Prosiding Seminar Teknik Elektro & Informaika
SNTEI 2016
PNUP, Makassar, 3 November 2016
Pengaruh Struktur Pemrograman Dan Compiler Pada Kecepatan Operasi
Menggunakan Arduino Uno
Dadan Nurdin Bagenda1), Rida Hudaya 2)
Teknik Elektronika, Politeknik Negeri Bandung
email: [email protected]
2
Teknik Elektronika, Politeknik Negeri Bandung
email: [email protected]
1
Abstract
Arduino Uno banyak digunakan sebagai basis dari tugas akhir pada aplikasi mikrokontroler yang juga
mulai merambah ke dunia industri. Bentuk modul ini compact dan IDE-nya user friendly, namun
pemrogramannya bahasa C dimana salahsatu contohnya lebih sulit dalam manajemen register dibandingkan
assembler, juga hasil level optimasi default compiler-nya relatif lambat, hal ini dapat berdampak memperlambat
eksekusi. Hal ini berdampak besar jika digunakan pada aplikasi massive yang membutuhkan proses cepat.
Maka akan dilakukan pengujian Arduino Uno dengan membandingkan berbagai struktur pemrograman,
sehingga dapat mengetahui perintah dan struktur yang paling cepat. Dan membandingkan kecepatan hasil dari
berbagai level-compile-nya, diharapkan dapat mengetahui level-compile paling optimal dari sisi ukuran file.
Arduino Uno yang digunakan dengan Chip ATMega328 berbentuk DIP. IDE Arduino 1.6.10 sebagai
editor, compiler, Flash programming/Uploader sekaligus HMI console protokol USART. Osiloscope sebagai
penampil data. Metodologi yang digunakan adalah kuantitatif experimental.
Setelah membandingkan beberapa struktur pemrograman pada Arduino Uno menggunakan software
compiler IDE Arduino, mendapatkan hasil waktu tempuh sbb; untuk output tercepat ke pin I/O adalah perintah
“DDRB=0B111111” 1.67% dari digital.Write() dengan pin alias, tipe data “char” 25% dari float (tipe
terlambat), mengakses 1 byte memory SRAM 0.005% dari EEPROM Internal, operasi aritmatika tidak dapat
diambil kesimpulan karena sangat bervariasi tergantung nilainnya, fungsi perulangan “for” memiliki waktu
tempuh 99.63% dari “while”, dengan tipe data char metoda perulangan decrement 74.53% dari increment,
dengan tipe data int metoda perulangan increment 83.08% dari decrement, dengan tipe data float metoda
perulangan decrement sama dengan increment, pengiriman serial 1040us/byte pada 9600bps dan 40us/byte pada
250000bps, pengiriman paralel 289us/byte pada LCD. Setelah membandingkan berbagai opsi compiler ukuran
file *.hex dapat berubah namun tidak menjamin kecepatan proses, untuk beberapa perintah dasar opsi Compiler
‘-O3’ cenderung menambah waktu tempuh, namun sebagian besar opsi ini dapat mengurangi waktu tempuh
sampai 78.23% dari standar compiler.
Keywords: pemrograman, level-compile, kecepatan operasi, arduino.
I.
PENDAHULUAN
I.1 Latar Belakang Masalah
Mikrokontroler merupakan hardware
pengendali berukuran relatif kecil yang
diidentikkan dengan dunia otomasi (serba
otomatis), baik di lingkungan pendidikan (tugas
akhir), industri, maupun masyarakat pada
umumnya.
Arduino merupakan perusahaan yang
memproduksi software (compiler) IDE
Arduino, juga memproduksi hardware Board
Arduino. Board Arduino diproduksi berbagai
tipe. Arduino pun semakin banyak digunakan
oleh perusahaan besar seperti google yang
menggunakan arduino untuk Accessory
Development Kit[8] dan NASA yang
menggunakan arduino untuk prototyping[9].
Bahkan arduino sudah mulai digunakan dalam
akuisisi data, terlihat dengan tersedianya Lab
View Interface for Arduino (LVIFA)[10].
Bentuk modul ini compact dan IDE-nya
user friendly, namun pemrogramannya bahasa
C dimana salahsatu contohnya lebih sulit dalam
manajemen register dibandingkan assembler,
juga hasil level optimasi default compiler-nya
relatif lambat, hal ini dapat berdampak
memperlambat eksekusi.
Menurut Robert Sedgewick dalam bukunya
berjudul Algorithms “Program komputer akan
bermanfaat optimalisasinya jika algoritmanya
digunakan untuk tugas yang sangat besar atau
akan digunakan berkali-kali”[7].
I.2 Perumusan Masalah
Dari latar belakang masalah
terumuskanlah beberapa masalah sbb.:
diatas
ISBN: 978-602-18168-0-6
62
Prosiding Seminar Teknik Elektro & Informaika
SNTEI 2016
PNUP, Makassar, 3 November 2016
1. Pemrograman C yang lebih sulit dalam
manajemen
register
pada
memory
dibandingkan dengan assembler. Perbedaan
struktur pemrograman C pada PC dapat
mengakibatkan perbedaan pada kecepatan
proses eksekusinya, seperti pada penelitian
sebelumnya[3][4][6]. Namun ini perlu diuji
pada mikrokontroler yang memiliki
resource jauh lebih kecil.
2. Proses default-compile dari compiler IDE
Arduino
yang
standar,
sehingga
mengakibatkan ukuran file *.hex lebih
besar, hal ini dapat berakibat pada proses
eksekusi yang lebih lambat.
I.3. Tujuan Penelitian
Dari permasalahan diatas perlu dicari
solusinya, penulis mengatasi permasalahan ini
dengan cara sbb.:
1. Mengukur dan membandingkan berbagai
struktur pemrograman pada modul
hardware Arduino Uno menggunakan
software compiler IDE Arduino, sehingga
mendapatkan baris perintah atau struktur
pemrograman paling optimal dari sisi
kecepatannya.
2. Mengukur dan membandingkan berbagai
option-compile pada compiler IDE
Arduino menggunakan optimasi GNU C,
yang
bersumber
dari
penelitian
sebelumnya[3] (teruji pada software PC
compiler). Diharapkan dapat menghasilkan
data percobaan option-compile paling
optimal dari sisi ukuran file. Dengan
asumsi, semakin kecil ukuran file akan
mempercepat proses eksekusinya.
.
II.
KAJIAN LITERATUR
Penelitian-penelitian lain pun memicu
gagasan penelitian ini, dengan ringkasan yang
disusun pada tabel 2.1. Tabel 2.1 juga bisa
mewakili penelitan apa saja yang terkait
langsung dengan penelitian ini dan menunjukan
pada ranah apa kaitannya. Tabel ini pun
menunjukan area penelitian sebelumnya yang
dijadikan sumber referensi oleh penulis,
nampak bahwa penelitian yang akan dilakukan
ini mencakup 3 area diantaranya menggunakan
arduino dan mengoptimasi dari sisi Compiler
juga struktur pemrograman.
No
1.
2.
3.
4.
I.4. Ruang Lingkup dan Batasan Masalah
Penelitian ini memiliki ruang lingkup
dan batasan sbb.:
1. Metodelogi penelitian yang digunakan
adalah kuantitatif experimental
2. Kombinasi pengujian diantaranya;
Struktur pemrograman dan level
option-compile pada compiler IDE
Arduino.
3. Optimasi pengujian terukur pada;
Kecepatan dan ukuran program *.hex
4. Peralatan hardware yang digunakan
dalam penelitian ini sbb.:
Arduino Uno.
Osilloscope GW Instek GDS1102A-U, 2 channel.
5. Peralatan software yang digunakan
dalam penelitian ini sbb.:
IDE Arduino 1.6.10 sebagai editor,
compiler, Flash programming/
Uploader sekaligus console HMI
dengan protokol USART.
Freewave 3 Software yang dapat
menghubungkan GW Instek GDS1102A-U dengan PC.
5.
6.
7.
Tabel 2.1. Ranah Tinjauan Pustaka
Peneliti – Judul –
Thn Use Optimasi
Lokasi
Ard
pada sisi
uin Com Pem
piler
rog
o
Suchocki, R.- A
functional language and
compiler for the
Arduino microcontroller –
Washington.[1]
Mircea D., - Optimize
Arduino Memory Usage
- German[2]
Nitika G. - Optimal
Code Compiling in C India[3]
W. Durfee - Arduino uC
Guide - University of
Minnesota [6]
Michael E. Lee Optimization of
Computer Programs in
C - USA[4]
Tips for Optimizing CCpp Code - Clemson
University - US[5]
Dadan N. B. - Pengaruh
Struktur Pemrograman
Dan Compiler Pada
Kecepatan Operasi
Menggunakan Arduino
Uno - POLBAN Indonesia
2014
*
2015
*
2015
2011
*
*
*
*
*
1997
*
-
*
2016
*
*
*
Suchocki, R. dari washington pada
papernya yang berjudul “A functional language
and compiler for the Arduino microcontroller”[1], memuat penelitiannya yang
membuat software compiler, editor sekaligus
uploader berbasis GNU compiler for arduino.
ISBN: 978-602-18168-0-6
63
Prosiding Seminar Teknik Elektro & Informaika
SNTEI 2016
PNUP, Makassar, 3 November 2016
Mircea D., dari German[2] pada artikelnya
yang berjudul “Optimize Arduino Memory
Usage“
meneliti
bagaimana
pengaruh
perbedaan kecepatan penggunaan memori
RAM pada arduino. Juga menjelaskan ukuran
memori berbagai tipedata seperti pada tabel 2.2
Tabel 2.2. Ukuran memori berbagai tipedata[2].
Tipedata
Ukuran
(Bytes)
Nilai
boolean, bool
1
true(1) or false(0)
char
1
ASCII character or signed
value in the range [-128, 127]
unsigned char,
byte, uint8_t
1
ASCII character or unsigned
value in the range [0, 255]
int, short
2
signed value in the range [32768, 32767]
unsigned int,
word, uint16_t
2
unsigned value in the range [0,
65535]
long
4
signed value in the range
[2147483648, 2147483647]
4
unsigned value in the range [0,
4294967295]
unsigned long,
uint32_t
float, double
4
floating point value in the
range [-3.4028235e+38,
3.4028235e+38]
mencoba berbagai struktur pemrograman dan
mengukur
masing-masing
kecepatan
operasinya, juga mencoba berbagai level
option compiler dan mengukur masing-masing
kecepatan operasinya juga ukuran file hasil
compile-nya.
Untuk mencapai tujuan, dapat diurutkan
bahwa tahapan rencana penelitian dan indikator
kinerja seperti berikut,
KEGIATAN PENELITIAN
INDIKATOR KINERJA
PENELITIAN
Perbandingan Kecepatan
penggunakan Memori sram
dan eeprom
Didapatkan salah satu yang
tercepatnya diantara 2 jenis
memori sram dan eeprom.
Perbandingan penggunaan
berbagai tipe data pada
pengulangan
Didapatkan kecepatan dari
masing-masing tipe data.
Perbandingan fungsi
pengulangan for (increment
dan decrement until zero)
Didapat data pengulangan
fungsi for tercepat
Perbandingan fungsi
pengulangan while (increment
dan decrement until zero)
Didapat data pengulangan
fungsi while tercepat
Perbandingan Level
Optimalisasi
Ukuran file terkecil
NOTE: float and double are the
same in this (Arduino) platform
Menurut Nitika G. dalam penelitiannya
yang berjudul Optimal Code Compiling in C –
India 2015 “Teknik Optimasi digunakan untuk
mempercepat program komputer. Ini terfokus
pada meminimalisir waktu yang terbuang oleh
CPU dan memberikan tranformasi sourcecode
pengganti yang berfungsi sama”[3].
Dengan arah pengertian yang sama juga
disampaikan
oleh
Michael
E.
Lee.
“Optimization is the process of improving the
speed at which a program executes. Depending
on context it may refer to the human process of
making improvements at the source level or to
a compiler's efforts to re-arrange code at the
assembly level (or some other low level.” [4]
Artinya, Optimasi program merupakan
penggantian sourcecode lama menjadi baru
sehingga dapat mempercepat proses operasi.
Juga Clemson University di US yang
menjelaskan bagaimana cara mengoptimasi
code C dan CPP secara umum pada buku yang
berjudul “Tips for Optimizing C-CPP Code”[5].
III.
METODE PENELITIAN
Metodologi
yang
digunakan
pada
penelitian ini adalah kuantiatif experimental,
dimana penelitian dilakukan dengan cara
Luaran : Didapat kombinasi tercepat, dan beberapa kombinasi cepat
lainnya bermanfaat berdasarkan kebutuhan.
Gambar 3.1. Tahapan rencana penelitian dan indikator
kinerjanya
Tahap penelitian dimulai dengan penyiapan
seluruh komponen elektronik dan beberapa
peralatan pengujiannya. Dimulai dari hardwere
sampai software ini seperti yang tertulis pada
ruang lingkup pada bab pendahuluan.
Yang diamati/diukur tegantung pada
pengujiannya, jika yang diuji adalah struktur
pemrograman maka yang diukur adalah waktu
eksekusinya. Jika yang diuji adalah level
optimasinya maka yang diukur adalah
kecepatan eksekusinya, kecepatan compile-nya
dan ukuran hasil/file *.hex-nya.
Pelaksannaan teknis penelitian ini diawali
dengan penyusunan tempat, waktu dan bahan,
lalu melakukan persiapan dasar seperti alat
ukur dan dasar objek yang akan diukurnya.
Setelah itu memecah urutan garis besar
penelitian menjadi daftar pekerjaan yang lebih
rinci.
1. Peralatan hardware yang digunakan dalam
penelitian ini sbb.:
Arduino Uno.
ISBN: 978-602-18168-0-6
64
Prosiding Seminar Teknik Elektro & Informaika
SNTEI 2016
PNUP, Makassar, 3 November 2016
Osilloscope GW Instek GDS-1102AU,
2 channel instrumen pengukur utama.
2. Peralatan software yang digunakan dalam
penelitian ini sbb.:
IDE Arduino 1.6.10 sebagai editor,
compiler, uploader sekaligus HMI
console dengan protokol USART.
Freewave 3 Software yang dapat
menghubungkan GW Instek GDS1102A-U dengan PC.
Gambar IV.1. Waktu tempuh DDRB=0B111111 di awal
eksekusi.
Dengan beberapa percobaan ini dapat
disimpulkan bahwa output ke pin I/O perintah
“DDRB=0B111111” waktu tempuhnya 1.67%
dari “digital.Write()” dengan pin alias. Dan
pada akhir “void loop()” membuat jeda mulai
0.250 us s/d 0.252 us
Gambar 3.2. Pin I/O Atmega328 vs. Arduino Uno
Gambar 3.2 menggambarkan kaitan pin I/O
arduino uno dengan pin I/O original
Atmega328, sehingga kita dapat mengetahui
register I/O yang tepat untuk mengujinya.
IV.
HASIL DAN PEMBAHASAN
IV.1. Kecepatan Dasar Arduino UNO dan
IDE Compilernya
Kecepatan dasar Arduino UNO dan IDE
Compilernya ini dilakukan dengan cara
menggunakan program pada bagian perulangan
utama dan diukur pada oscilloscope.
Kecepatan tertinggi untuk memberikan
logika out pada pin I/O menggunakan perintah
pengaksesan register I/O secara langsung. Ini
terlihat pada pengujian berbagai perintah
pemberian logika out pada pin I/O dari dari
tabel 4.1 dengan hasil sbb:
Tabel 4.1. Kecepatan perintah logika out pin I/O
No.
Perintah
Runtime (us)
1
digitalWrite(pinOUT, 1);
3.68
2
digitalWrite(pinOUT, 0);
3.6
3
digitalWrite(8, 1);
3.36
4
digitalWrite(8, 0);
3.28
5
PORTB=0B111111;
0.064
6
PORTB=0B000000;
0.06
7
Akhir dari void loop
0.251
IV.2. Kecepatan Beberapa Struktur
Program Dengan Standar Option Compiler
Bagian sub program ini menjelaskan
beberapa struktur program dengan standar
option compiler atau tanpa mengatur option
compiler. Dengan beberapa pengujian sbb;
Pengujian berbagai tipe data, EEPROM 8
bit, Operasi aritmatika, Fungsi perulangan
“for()” dan “while()”, Pengujian waktu
tempuh proses mengirimkan data,
Pencacahan atau ADC.
Pengujian berbagai tipe data ini diuji
dengan mengeksekusi operasi “j=1”, dan j
hanyalah nama variablenya. Dari tabel 4.2
dapat dilihat bahwa, tipedata “char” adalah
tipedata yang paling cepat, waktu tempuh
sampai 25% dari float (tipe terlambat).
No.
Tabel 4.2. Pengujian berbagai tipe data
Perintah
Keterangan
Runtime (us)
1
j=1;
2
j=1;
3
j=1;
int, unsigned int
float,double,
long, long int,
long double,
unsigned long
char,
unsigned char,
0.252
0.504
0.126
Pengujian
pengaksesan
memori
EEPROM dilakukan dengan memberikan
data yang tidak lebih dari 8 bit. Ini
dilakukan agar dapat dibandingkan dengan
tipe data “char” yang juga 8 bit dari memori
SRAM. Sehingga didapat waktu eksekusi
perintah penulisan ke EEPROM ini adalah
ISBN: 978-602-18168-0-6
65
Prosiding Seminar Teknik Elektro & Informaika
SNTEI 2016
PNUP, Makassar, 3 November 2016
2.44 ms. Waktu tempuh mengakses 8 bit
dengan memory SRAM jauh lebih cepat
yaitu 0.005% dari waktu tempuh EEPROM
Internal.
Operasi aritmatika tidak dapat diambil
kesimpulan karena sangat bervariasi tergantung
nilai operand-nya. Karena waktu operasi ini
pada tipedata char bervariasi mulai dari 0.000
us unuk perkalian 1 s/d 6.564 us untuk
perkalian 10.
Penggunaan fungsi perulangan “for()” ratarata menempuh waktu 99.63% dari kecepatan
“while()”.
(100+99+100+98.7+100.5+100+99.37+100+
99+99+100+100)/12=99.63%
Ini didapat dari hasil berbagai pengukuran
fungsi “for()” dan fungsi ”while()”.
Jika
fungsi
perulangan
“for()”
menggunakan tipe data “unsigned char”
lebih cepat prosesnya jika mundur (j--)
menggunakan decrement, tipedata ini
merupakan looping paling cepat. Jika
menggunakan tipe data “int” lebih cepat
prosesnya jika maju (j++) menggunakan
increment. Jika menggunakan tipe data
“float” memiliki waktu tempuh yang sama
baik maju maupun mundur, dengan tipedata
ini merupakan looping paling lambat.
Hasil waktu tempuh tipe data “char” baik
pada fungsi perulangan “for()” maupun
“while()”, selalu lebih cepat menggunakan
metoda decrement atau perulangan dengan
masing-masing presentasi sebagai berikut.
(75+72.28+76.5+74.35)/4=74.53%
Hasil waktu tempuh tipe data “int” baik pada
fungsi perulangan “for()” maupun “while()”,
selalu lebih cepat menggunakan metoda
increment atau perulangan dengan masingmasing presentasi sebagai berikut.
(81.28+84.8+80.9+85.35)/4=83.08%
Dari hasil percobaan fungsi perulangan baik
menggunakan “for()” maupun “while()” dapat
disimpulkan bahwa;
Jika menggunakan tipe data “char” maka
waktu tempuhnya akan lebih cepat jika
menggunakan
metoda
decrement,
mencapai rata-rata 74.53% dari pada waktu
tempuh increment, struktur ini merupakan
struktur
perulangan
paling
cepat
sedikitnya 2% dari waktu tempuh tipe
“float” dengan nilai operand yang sama.
Dan jika menggunakan tipe data “int”
maka waktu tempuhnya akan lebih cepat
jika menggunakan metoda increment,
mencapai rata-rata 83.08% dari pada waktu
tempuh decrement.
Dan jika menggunakan tipe data “float”
memiliki waktu tempuh yang cenderung
sama baik increment maupun decrement,
dengan tipedata ini merupakan looping
paling lambat.
IV.3. Kecepatan Berbagai Opsi Optimasi
Compiler
Berbagai Opsi Optimasi compiler tersebut
di terapkan pada baris program berikut:
#pragma GCC optimize (“-Os”)
yang diletakan pada baris program paling atas.
Tabel 4.3. No kode pengujian untuk tabel-tabel
selanjutnya
No.
Perintah
Keterangan
1
PORTB=0B000000
terkecil
2
digitalWrite(pinOUT, 0)
aliasnya int
3
j=1
int
4
j=j*10
int
5
for(j=1;j
SNTEI 2016
PNUP, Makassar, 3 November 2016
Pengaruh Struktur Pemrograman Dan Compiler Pada Kecepatan Operasi
Menggunakan Arduino Uno
Dadan Nurdin Bagenda1), Rida Hudaya 2)
Teknik Elektronika, Politeknik Negeri Bandung
email: [email protected]
2
Teknik Elektronika, Politeknik Negeri Bandung
email: [email protected]
1
Abstract
Arduino Uno banyak digunakan sebagai basis dari tugas akhir pada aplikasi mikrokontroler yang juga
mulai merambah ke dunia industri. Bentuk modul ini compact dan IDE-nya user friendly, namun
pemrogramannya bahasa C dimana salahsatu contohnya lebih sulit dalam manajemen register dibandingkan
assembler, juga hasil level optimasi default compiler-nya relatif lambat, hal ini dapat berdampak memperlambat
eksekusi. Hal ini berdampak besar jika digunakan pada aplikasi massive yang membutuhkan proses cepat.
Maka akan dilakukan pengujian Arduino Uno dengan membandingkan berbagai struktur pemrograman,
sehingga dapat mengetahui perintah dan struktur yang paling cepat. Dan membandingkan kecepatan hasil dari
berbagai level-compile-nya, diharapkan dapat mengetahui level-compile paling optimal dari sisi ukuran file.
Arduino Uno yang digunakan dengan Chip ATMega328 berbentuk DIP. IDE Arduino 1.6.10 sebagai
editor, compiler, Flash programming/Uploader sekaligus HMI console protokol USART. Osiloscope sebagai
penampil data. Metodologi yang digunakan adalah kuantitatif experimental.
Setelah membandingkan beberapa struktur pemrograman pada Arduino Uno menggunakan software
compiler IDE Arduino, mendapatkan hasil waktu tempuh sbb; untuk output tercepat ke pin I/O adalah perintah
“DDRB=0B111111” 1.67% dari digital.Write() dengan pin alias, tipe data “char” 25% dari float (tipe
terlambat), mengakses 1 byte memory SRAM 0.005% dari EEPROM Internal, operasi aritmatika tidak dapat
diambil kesimpulan karena sangat bervariasi tergantung nilainnya, fungsi perulangan “for” memiliki waktu
tempuh 99.63% dari “while”, dengan tipe data char metoda perulangan decrement 74.53% dari increment,
dengan tipe data int metoda perulangan increment 83.08% dari decrement, dengan tipe data float metoda
perulangan decrement sama dengan increment, pengiriman serial 1040us/byte pada 9600bps dan 40us/byte pada
250000bps, pengiriman paralel 289us/byte pada LCD. Setelah membandingkan berbagai opsi compiler ukuran
file *.hex dapat berubah namun tidak menjamin kecepatan proses, untuk beberapa perintah dasar opsi Compiler
‘-O3’ cenderung menambah waktu tempuh, namun sebagian besar opsi ini dapat mengurangi waktu tempuh
sampai 78.23% dari standar compiler.
Keywords: pemrograman, level-compile, kecepatan operasi, arduino.
I.
PENDAHULUAN
I.1 Latar Belakang Masalah
Mikrokontroler merupakan hardware
pengendali berukuran relatif kecil yang
diidentikkan dengan dunia otomasi (serba
otomatis), baik di lingkungan pendidikan (tugas
akhir), industri, maupun masyarakat pada
umumnya.
Arduino merupakan perusahaan yang
memproduksi software (compiler) IDE
Arduino, juga memproduksi hardware Board
Arduino. Board Arduino diproduksi berbagai
tipe. Arduino pun semakin banyak digunakan
oleh perusahaan besar seperti google yang
menggunakan arduino untuk Accessory
Development Kit[8] dan NASA yang
menggunakan arduino untuk prototyping[9].
Bahkan arduino sudah mulai digunakan dalam
akuisisi data, terlihat dengan tersedianya Lab
View Interface for Arduino (LVIFA)[10].
Bentuk modul ini compact dan IDE-nya
user friendly, namun pemrogramannya bahasa
C dimana salahsatu contohnya lebih sulit dalam
manajemen register dibandingkan assembler,
juga hasil level optimasi default compiler-nya
relatif lambat, hal ini dapat berdampak
memperlambat eksekusi.
Menurut Robert Sedgewick dalam bukunya
berjudul Algorithms “Program komputer akan
bermanfaat optimalisasinya jika algoritmanya
digunakan untuk tugas yang sangat besar atau
akan digunakan berkali-kali”[7].
I.2 Perumusan Masalah
Dari latar belakang masalah
terumuskanlah beberapa masalah sbb.:
diatas
ISBN: 978-602-18168-0-6
62
Prosiding Seminar Teknik Elektro & Informaika
SNTEI 2016
PNUP, Makassar, 3 November 2016
1. Pemrograman C yang lebih sulit dalam
manajemen
register
pada
memory
dibandingkan dengan assembler. Perbedaan
struktur pemrograman C pada PC dapat
mengakibatkan perbedaan pada kecepatan
proses eksekusinya, seperti pada penelitian
sebelumnya[3][4][6]. Namun ini perlu diuji
pada mikrokontroler yang memiliki
resource jauh lebih kecil.
2. Proses default-compile dari compiler IDE
Arduino
yang
standar,
sehingga
mengakibatkan ukuran file *.hex lebih
besar, hal ini dapat berakibat pada proses
eksekusi yang lebih lambat.
I.3. Tujuan Penelitian
Dari permasalahan diatas perlu dicari
solusinya, penulis mengatasi permasalahan ini
dengan cara sbb.:
1. Mengukur dan membandingkan berbagai
struktur pemrograman pada modul
hardware Arduino Uno menggunakan
software compiler IDE Arduino, sehingga
mendapatkan baris perintah atau struktur
pemrograman paling optimal dari sisi
kecepatannya.
2. Mengukur dan membandingkan berbagai
option-compile pada compiler IDE
Arduino menggunakan optimasi GNU C,
yang
bersumber
dari
penelitian
sebelumnya[3] (teruji pada software PC
compiler). Diharapkan dapat menghasilkan
data percobaan option-compile paling
optimal dari sisi ukuran file. Dengan
asumsi, semakin kecil ukuran file akan
mempercepat proses eksekusinya.
.
II.
KAJIAN LITERATUR
Penelitian-penelitian lain pun memicu
gagasan penelitian ini, dengan ringkasan yang
disusun pada tabel 2.1. Tabel 2.1 juga bisa
mewakili penelitan apa saja yang terkait
langsung dengan penelitian ini dan menunjukan
pada ranah apa kaitannya. Tabel ini pun
menunjukan area penelitian sebelumnya yang
dijadikan sumber referensi oleh penulis,
nampak bahwa penelitian yang akan dilakukan
ini mencakup 3 area diantaranya menggunakan
arduino dan mengoptimasi dari sisi Compiler
juga struktur pemrograman.
No
1.
2.
3.
4.
I.4. Ruang Lingkup dan Batasan Masalah
Penelitian ini memiliki ruang lingkup
dan batasan sbb.:
1. Metodelogi penelitian yang digunakan
adalah kuantitatif experimental
2. Kombinasi pengujian diantaranya;
Struktur pemrograman dan level
option-compile pada compiler IDE
Arduino.
3. Optimasi pengujian terukur pada;
Kecepatan dan ukuran program *.hex
4. Peralatan hardware yang digunakan
dalam penelitian ini sbb.:
Arduino Uno.
Osilloscope GW Instek GDS1102A-U, 2 channel.
5. Peralatan software yang digunakan
dalam penelitian ini sbb.:
IDE Arduino 1.6.10 sebagai editor,
compiler, Flash programming/
Uploader sekaligus console HMI
dengan protokol USART.
Freewave 3 Software yang dapat
menghubungkan GW Instek GDS1102A-U dengan PC.
5.
6.
7.
Tabel 2.1. Ranah Tinjauan Pustaka
Peneliti – Judul –
Thn Use Optimasi
Lokasi
Ard
pada sisi
uin Com Pem
piler
rog
o
Suchocki, R.- A
functional language and
compiler for the
Arduino microcontroller –
Washington.[1]
Mircea D., - Optimize
Arduino Memory Usage
- German[2]
Nitika G. - Optimal
Code Compiling in C India[3]
W. Durfee - Arduino uC
Guide - University of
Minnesota [6]
Michael E. Lee Optimization of
Computer Programs in
C - USA[4]
Tips for Optimizing CCpp Code - Clemson
University - US[5]
Dadan N. B. - Pengaruh
Struktur Pemrograman
Dan Compiler Pada
Kecepatan Operasi
Menggunakan Arduino
Uno - POLBAN Indonesia
2014
*
2015
*
2015
2011
*
*
*
*
*
1997
*
-
*
2016
*
*
*
Suchocki, R. dari washington pada
papernya yang berjudul “A functional language
and compiler for the Arduino microcontroller”[1], memuat penelitiannya yang
membuat software compiler, editor sekaligus
uploader berbasis GNU compiler for arduino.
ISBN: 978-602-18168-0-6
63
Prosiding Seminar Teknik Elektro & Informaika
SNTEI 2016
PNUP, Makassar, 3 November 2016
Mircea D., dari German[2] pada artikelnya
yang berjudul “Optimize Arduino Memory
Usage“
meneliti
bagaimana
pengaruh
perbedaan kecepatan penggunaan memori
RAM pada arduino. Juga menjelaskan ukuran
memori berbagai tipedata seperti pada tabel 2.2
Tabel 2.2. Ukuran memori berbagai tipedata[2].
Tipedata
Ukuran
(Bytes)
Nilai
boolean, bool
1
true(1) or false(0)
char
1
ASCII character or signed
value in the range [-128, 127]
unsigned char,
byte, uint8_t
1
ASCII character or unsigned
value in the range [0, 255]
int, short
2
signed value in the range [32768, 32767]
unsigned int,
word, uint16_t
2
unsigned value in the range [0,
65535]
long
4
signed value in the range
[2147483648, 2147483647]
4
unsigned value in the range [0,
4294967295]
unsigned long,
uint32_t
float, double
4
floating point value in the
range [-3.4028235e+38,
3.4028235e+38]
mencoba berbagai struktur pemrograman dan
mengukur
masing-masing
kecepatan
operasinya, juga mencoba berbagai level
option compiler dan mengukur masing-masing
kecepatan operasinya juga ukuran file hasil
compile-nya.
Untuk mencapai tujuan, dapat diurutkan
bahwa tahapan rencana penelitian dan indikator
kinerja seperti berikut,
KEGIATAN PENELITIAN
INDIKATOR KINERJA
PENELITIAN
Perbandingan Kecepatan
penggunakan Memori sram
dan eeprom
Didapatkan salah satu yang
tercepatnya diantara 2 jenis
memori sram dan eeprom.
Perbandingan penggunaan
berbagai tipe data pada
pengulangan
Didapatkan kecepatan dari
masing-masing tipe data.
Perbandingan fungsi
pengulangan for (increment
dan decrement until zero)
Didapat data pengulangan
fungsi for tercepat
Perbandingan fungsi
pengulangan while (increment
dan decrement until zero)
Didapat data pengulangan
fungsi while tercepat
Perbandingan Level
Optimalisasi
Ukuran file terkecil
NOTE: float and double are the
same in this (Arduino) platform
Menurut Nitika G. dalam penelitiannya
yang berjudul Optimal Code Compiling in C –
India 2015 “Teknik Optimasi digunakan untuk
mempercepat program komputer. Ini terfokus
pada meminimalisir waktu yang terbuang oleh
CPU dan memberikan tranformasi sourcecode
pengganti yang berfungsi sama”[3].
Dengan arah pengertian yang sama juga
disampaikan
oleh
Michael
E.
Lee.
“Optimization is the process of improving the
speed at which a program executes. Depending
on context it may refer to the human process of
making improvements at the source level or to
a compiler's efforts to re-arrange code at the
assembly level (or some other low level.” [4]
Artinya, Optimasi program merupakan
penggantian sourcecode lama menjadi baru
sehingga dapat mempercepat proses operasi.
Juga Clemson University di US yang
menjelaskan bagaimana cara mengoptimasi
code C dan CPP secara umum pada buku yang
berjudul “Tips for Optimizing C-CPP Code”[5].
III.
METODE PENELITIAN
Metodologi
yang
digunakan
pada
penelitian ini adalah kuantiatif experimental,
dimana penelitian dilakukan dengan cara
Luaran : Didapat kombinasi tercepat, dan beberapa kombinasi cepat
lainnya bermanfaat berdasarkan kebutuhan.
Gambar 3.1. Tahapan rencana penelitian dan indikator
kinerjanya
Tahap penelitian dimulai dengan penyiapan
seluruh komponen elektronik dan beberapa
peralatan pengujiannya. Dimulai dari hardwere
sampai software ini seperti yang tertulis pada
ruang lingkup pada bab pendahuluan.
Yang diamati/diukur tegantung pada
pengujiannya, jika yang diuji adalah struktur
pemrograman maka yang diukur adalah waktu
eksekusinya. Jika yang diuji adalah level
optimasinya maka yang diukur adalah
kecepatan eksekusinya, kecepatan compile-nya
dan ukuran hasil/file *.hex-nya.
Pelaksannaan teknis penelitian ini diawali
dengan penyusunan tempat, waktu dan bahan,
lalu melakukan persiapan dasar seperti alat
ukur dan dasar objek yang akan diukurnya.
Setelah itu memecah urutan garis besar
penelitian menjadi daftar pekerjaan yang lebih
rinci.
1. Peralatan hardware yang digunakan dalam
penelitian ini sbb.:
Arduino Uno.
ISBN: 978-602-18168-0-6
64
Prosiding Seminar Teknik Elektro & Informaika
SNTEI 2016
PNUP, Makassar, 3 November 2016
Osilloscope GW Instek GDS-1102AU,
2 channel instrumen pengukur utama.
2. Peralatan software yang digunakan dalam
penelitian ini sbb.:
IDE Arduino 1.6.10 sebagai editor,
compiler, uploader sekaligus HMI
console dengan protokol USART.
Freewave 3 Software yang dapat
menghubungkan GW Instek GDS1102A-U dengan PC.
Gambar IV.1. Waktu tempuh DDRB=0B111111 di awal
eksekusi.
Dengan beberapa percobaan ini dapat
disimpulkan bahwa output ke pin I/O perintah
“DDRB=0B111111” waktu tempuhnya 1.67%
dari “digital.Write()” dengan pin alias. Dan
pada akhir “void loop()” membuat jeda mulai
0.250 us s/d 0.252 us
Gambar 3.2. Pin I/O Atmega328 vs. Arduino Uno
Gambar 3.2 menggambarkan kaitan pin I/O
arduino uno dengan pin I/O original
Atmega328, sehingga kita dapat mengetahui
register I/O yang tepat untuk mengujinya.
IV.
HASIL DAN PEMBAHASAN
IV.1. Kecepatan Dasar Arduino UNO dan
IDE Compilernya
Kecepatan dasar Arduino UNO dan IDE
Compilernya ini dilakukan dengan cara
menggunakan program pada bagian perulangan
utama dan diukur pada oscilloscope.
Kecepatan tertinggi untuk memberikan
logika out pada pin I/O menggunakan perintah
pengaksesan register I/O secara langsung. Ini
terlihat pada pengujian berbagai perintah
pemberian logika out pada pin I/O dari dari
tabel 4.1 dengan hasil sbb:
Tabel 4.1. Kecepatan perintah logika out pin I/O
No.
Perintah
Runtime (us)
1
digitalWrite(pinOUT, 1);
3.68
2
digitalWrite(pinOUT, 0);
3.6
3
digitalWrite(8, 1);
3.36
4
digitalWrite(8, 0);
3.28
5
PORTB=0B111111;
0.064
6
PORTB=0B000000;
0.06
7
Akhir dari void loop
0.251
IV.2. Kecepatan Beberapa Struktur
Program Dengan Standar Option Compiler
Bagian sub program ini menjelaskan
beberapa struktur program dengan standar
option compiler atau tanpa mengatur option
compiler. Dengan beberapa pengujian sbb;
Pengujian berbagai tipe data, EEPROM 8
bit, Operasi aritmatika, Fungsi perulangan
“for()” dan “while()”, Pengujian waktu
tempuh proses mengirimkan data,
Pencacahan atau ADC.
Pengujian berbagai tipe data ini diuji
dengan mengeksekusi operasi “j=1”, dan j
hanyalah nama variablenya. Dari tabel 4.2
dapat dilihat bahwa, tipedata “char” adalah
tipedata yang paling cepat, waktu tempuh
sampai 25% dari float (tipe terlambat).
No.
Tabel 4.2. Pengujian berbagai tipe data
Perintah
Keterangan
Runtime (us)
1
j=1;
2
j=1;
3
j=1;
int, unsigned int
float,double,
long, long int,
long double,
unsigned long
char,
unsigned char,
0.252
0.504
0.126
Pengujian
pengaksesan
memori
EEPROM dilakukan dengan memberikan
data yang tidak lebih dari 8 bit. Ini
dilakukan agar dapat dibandingkan dengan
tipe data “char” yang juga 8 bit dari memori
SRAM. Sehingga didapat waktu eksekusi
perintah penulisan ke EEPROM ini adalah
ISBN: 978-602-18168-0-6
65
Prosiding Seminar Teknik Elektro & Informaika
SNTEI 2016
PNUP, Makassar, 3 November 2016
2.44 ms. Waktu tempuh mengakses 8 bit
dengan memory SRAM jauh lebih cepat
yaitu 0.005% dari waktu tempuh EEPROM
Internal.
Operasi aritmatika tidak dapat diambil
kesimpulan karena sangat bervariasi tergantung
nilai operand-nya. Karena waktu operasi ini
pada tipedata char bervariasi mulai dari 0.000
us unuk perkalian 1 s/d 6.564 us untuk
perkalian 10.
Penggunaan fungsi perulangan “for()” ratarata menempuh waktu 99.63% dari kecepatan
“while()”.
(100+99+100+98.7+100.5+100+99.37+100+
99+99+100+100)/12=99.63%
Ini didapat dari hasil berbagai pengukuran
fungsi “for()” dan fungsi ”while()”.
Jika
fungsi
perulangan
“for()”
menggunakan tipe data “unsigned char”
lebih cepat prosesnya jika mundur (j--)
menggunakan decrement, tipedata ini
merupakan looping paling cepat. Jika
menggunakan tipe data “int” lebih cepat
prosesnya jika maju (j++) menggunakan
increment. Jika menggunakan tipe data
“float” memiliki waktu tempuh yang sama
baik maju maupun mundur, dengan tipedata
ini merupakan looping paling lambat.
Hasil waktu tempuh tipe data “char” baik
pada fungsi perulangan “for()” maupun
“while()”, selalu lebih cepat menggunakan
metoda decrement atau perulangan dengan
masing-masing presentasi sebagai berikut.
(75+72.28+76.5+74.35)/4=74.53%
Hasil waktu tempuh tipe data “int” baik pada
fungsi perulangan “for()” maupun “while()”,
selalu lebih cepat menggunakan metoda
increment atau perulangan dengan masingmasing presentasi sebagai berikut.
(81.28+84.8+80.9+85.35)/4=83.08%
Dari hasil percobaan fungsi perulangan baik
menggunakan “for()” maupun “while()” dapat
disimpulkan bahwa;
Jika menggunakan tipe data “char” maka
waktu tempuhnya akan lebih cepat jika
menggunakan
metoda
decrement,
mencapai rata-rata 74.53% dari pada waktu
tempuh increment, struktur ini merupakan
struktur
perulangan
paling
cepat
sedikitnya 2% dari waktu tempuh tipe
“float” dengan nilai operand yang sama.
Dan jika menggunakan tipe data “int”
maka waktu tempuhnya akan lebih cepat
jika menggunakan metoda increment,
mencapai rata-rata 83.08% dari pada waktu
tempuh decrement.
Dan jika menggunakan tipe data “float”
memiliki waktu tempuh yang cenderung
sama baik increment maupun decrement,
dengan tipedata ini merupakan looping
paling lambat.
IV.3. Kecepatan Berbagai Opsi Optimasi
Compiler
Berbagai Opsi Optimasi compiler tersebut
di terapkan pada baris program berikut:
#pragma GCC optimize (“-Os”)
yang diletakan pada baris program paling atas.
Tabel 4.3. No kode pengujian untuk tabel-tabel
selanjutnya
No.
Perintah
Keterangan
1
PORTB=0B000000
terkecil
2
digitalWrite(pinOUT, 0)
aliasnya int
3
j=1
int
4
j=j*10
int
5
for(j=1;j