Program yang sudah diupload ke Arduino tidak dapat diedit lagi. Tepatnya: bisa diambil kalau Arduinonya belum dikunci, kodenya sudah tidak dalam bentuk awal. Kode dapat diedit, namun sulit sekali karena dalam bahasa assembly.
Program sketch Arduino menggunakan bahasa C++, dalam bentuk format teks program. Filenya menggunakan ekstensi *.INO. Ketika akan diupload ke Arduino, program tersebut diubah dulu oleh compiler dan linker menjadi file *.HEX . File *.HEX ini berisi kode-kode mesin yang akan diterjemahkan oleh prosesor di Arduino menjadi instruksi yang akan dikerjakan. Kode bahasa C++ tidak ada di dalam file HEX tersebut, sehingga kita tidak dapat lagi mengedit progam yang sudah diupload ke Arduino.
Berikut ini adalah source code untuk membuat LED berkedip, sumbernya dari contoh di Arduino IDE (File -> Examples -> 01.Basics -> Blink.
Penjelasan tentang software tersebut dapat juga dibaca di artikel “Arduino Tutorial Blink“.
Pada potongan kode berikut ini , komentar pada kode dihilangkan sehingga hanya source code pentingnya saja yang ditampilkan.
void setup() { |
Software itu dicompile, menghasilkan binary dalam format HEX dengan nama “Blink.ino.hex”.
File “Blink.ino.hex” ini yang kemudian dimasukkan ke dalam prosesor di Arduino UNO, yaitu ATmega328. Format HEX ini adalah format teks ASCII , sedangkan untuk melihat wujud data ini dalam bentuk binary, mesti menggunakan software avr-objcopy, yang biasanya di Windows ada di “C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-objcopy”.
File HEX ini diubah dengan avr-objcopy menjadi format binary, dengan perintah sebagai berikut:
"C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-objcopy" -I ihex Blink.ino.hex -O binary blink.bin
Isi file dilihat dengan utility HxD (), hasilnya sebagai berikut:
Dari kode biner tersebut nampak sudah tidak ada lagi teks source code yang aslinya. Sehingga teks asli source code tidak dapat lagi diedit berdasarkan program yang sudah diupload ke Arduino UNO.
Untuk melihat kerja dari program binary tersebut dapat menggunakan fitur disassembly, namun sangat sulit dibaca dibandingkan dengan source code aslinya.
Kode biner tersebut dapat dibaca dari prosesor ATmega328, namun syaratnya adalah fuse bit untuk membaca FLASH memory pada ATmega328 belum dikunci.
Kode program tersebut dapat diubah ke dalam bahasa assembly, dengan perintah berikut ini:
"C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-objdump" –j .sec1 –d –m avr5 Blink.ino.hex > blink.asm |
File blink.asm berisi kode dalam bahasa assembly, namun membacanya cukup sulit. Contoh kodenya dapat dilihat di tautan berikut ini: blink.asm
Referensi
- Hxd, Freeware HEX & Binary Editor
- Atmel Studio 7
- Arduino Tutorial Blink
- Converting Intel Hex to Binary
- blink.asm