Pada posting : Matematika pd Bilangan Pecahan (float)
Saya membahas mengenai error pada hasil perhitungan, dan ketika membuka-buka Help CoViAVR tentang Data Types dan Type Conversions terdapat informasi yang menunjukkan penyebab terjadinya error pada pemrosesan 2 buah bilangan yang berbeda tipe.
Kali ini akan saya coba bahas.
Data Types
Gambar tersebut memberikan informasi mengenai tipe data, penulisan tipe data, range tipe data, dan ukurannya / Size (Bits).
Jika menggunakan program pada komputer seperti Delphi, Visual C, Visual Studio, Visual Basic, dll, penggunaan tipe data kurang begitu diperhatikan karena komputer memiliki prosessor yang cepat dan RAM yang besar.
Tetapi untuk mikrokontroller penggunaan tipe data (sangat) penting karena mempengaruhi beberapa hal antara lain : kecepatan eksekusi mikrokontroller, penggunaan RAM / Data Stack Size, Kapasitas memori program, dan hasil pada perhitungan.
Type Data
Type data penulisannya harus sesuai agar range nilai yang digunakan sesuai dengan perancangan, penulisan tipe data seperti pada gambar diatas. Jika tipe data char ditulis tanpa menggunakan unsigned (tidak tanda) atau signed (bertanda) maka secara otomatis compiler akan membuatnya menjadi unsigned sesuai dengan konfigurasi default-nya.
Pada tipe bit, bool, _Bool menyatakan suatu keadaan yang bernilai true (1 / high) atau false (0 /low) tetapi ukuran bit hanya 1 bit sedangkan ukuran bool dan _Bool 1 byte (8 bit). Oleh sebab itu harus mengetahui kapan menggunakan bit dan kapan menggunakan bool/_Bool.
Contohnya yaitu ketika bit digunakan saat mengakses 1 buah pin mikrokontroller dan bool digunakan ketika menggunakan 1 buah RAM (1 byte) sebagai memori menyimpan nilai true atau false (karena ram / stack pointer minimal 1 byte).
Size (bits)
Size (bits) berpengaruh pada beberapa hal yaitu (yang kuketahui) :
- Besarnya memori program, RAM, data stack size, dan EEPROM (jika digunakan). Oleh sebab itu untuk menghemat memori gunakan tipe data yang tepat.
- Kecepatan eksekusi mikrokontroller. Berkaitan dengan point 1 semakin besar Size-nya semakin lama waktu eksekusinya.
- Kesalahan pada proses aritmatika data atau perpindahan data.
Contoh untuk aritmatika :
unsigned char a=30;
unsigned char b=128;
unsigned int c;
c=a*b; // hasilnya salah
c=(unsigned int) a*b; // hasil tipe unsigned char dikonversi menjadi unsigned int.
Met Mencoba. ;)