.
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 DataType 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.
Untuk point 3 silahkan lihat pada help CVAVR tentang Type Conversion. Dijelaskan bahwa pada
Project|Configure|C Compiler|Code Generation|Promote char to int tidak di centang, karena konfigurasi ini di rancang untuk AVR dengan CPU 16 dan 32 bit, tidak disarankan untuk AVR dengan CPU 8 bit seperti ATmega8535. Jika dicentang maka setiap variabel dengan
size 8 bit akan dikonversi menjadi 16 bit sehingga berpengaruh pada penggunaan memori dan memperlambat kecepatan CPU AVR.
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. ;)