Velikost int v avr-gcc

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
slash8

Velikost int v avr-gcc

#1 Příspěvek od slash8 »

Prosím vysvětlete mi jaká je velikost integer pro programování 8 bitových atmelů pomocí avg-gcc. Nikde jsem se to nedočetl. Jen píšou že se dá uměle snížit na 8 bitů, ale jak je tedy int veliké? Pokud je větší než 8 bitů tak proč musím při násobení třeba 20000L*konstanta psát za číslo L abych to přetypoval na long? Děkuji za odpovědi.
AB

#2 Příspěvek od AB »

Dokumentace pro GCC je v poněkud obtížně čitelném dokumentu avr-libc.
http://download.savannah.gnu.org/releases-noredirect/avr-libc/avr-libc-user-manual-1.4.4.pdf
V popisu knihovny <stdlib.h> na straně 64 je vidět kolik bitů mají celočíselné proměnné.

int má 16 bitů, long 32 bitů.
Konstanta má defaultně typ int.
Když napíšete

int intvar = 50000
Long_var = 20000 * int_var
tak překladač vypočítá pravou stranu do pomocné proměnné typu int (ta ovšem přeteče), a pak ji přiřadí do L_var.

Aby se to nestalo, je třeba aspoň jednu hodnotu na pravé straně přetypovat na long.

Long_var = 20000 * (unsigned long)int_var;
nebo
Long_var = 20000L * int_var
Uživatelský avatar
DRAKE
Příspěvky: 276
Registrován: 05 zář 2005, 00:00

#3 Příspěvek od DRAKE »

Velikost int zjistis pomoci sizeof(int). A podle vysledku (8,16,32 ) si rozsvit prislusnou leddiodu. Jinak teda je to 16. Pokud chces psat programy multiplatforme tak pouzivej knihovnu typedefs.h. Ta obsahuje typy napr. uint_8, uint_16, int_64...., když budeš používat tohle, vyhneš se problémů s typy ¨s kterýmkoliv kompilátorem.
Ježíš na kříži zaplatil za naše hříchy a tím nás osvobodil od věčné smrti. Platí i pro bastliře :-).
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“