Ha a C / C ++ szoftvert más platformokon használja, akkor az int
típus általában 4 bájt (vagy potenciálisan több). Az Arduino-n azonban csak 2 bájt.
Miért más? Befolyásolja-e a teljesítményt, ha mindig a 4 bájtos long
-ot használom?
Ha a C / C ++ szoftvert más platformokon használja, akkor az int
típus általában 4 bájt (vagy potenciálisan több). Az Arduino-n azonban csak 2 bájt.
Miért más? Befolyásolja-e a teljesítményt, ha mindig a 4 bájtos long
-ot használom?
Az ATmega328, amelyet sok Arduinos használ, egy 8 bites mikrovezérlő. Ez azt jelenti, hogy a regiszterek 8 bitesek, az adatbusz 8 bites, a portok 8 bitesek. Van néhány minimális 16 bites aspektus a rendszerben (pl. Az egyik időzítő), de szinte minden 8 bites.
Ezért a legtöbb művelet egyszerre 8 biteset kezel. A 8 bites kivételével (pl. 16 bites vagy 32 bites egész számok és lebegőpontos számok) bármi mással való munka megköveteli azt, amit alapvetően szoftveremulációnak lehetne nevezni, ahol a fordító több utasítással dolgozik ezen nagyobb változókon. A p> 8 bites nyilvánvalóan megfelelő egy 8 bites port megcímzéséhez. Elég sok hurokszámlálóval, visszatérési értékekkel és ASCII karakterekkel is foglalkozni. A számokkal való foglalkozás azonban nem igazán elég. Az aláírt 8 bites int (int8_t) csak -128 -> +127-et jelenthet. Az aláíratlan (uint8_t) csak 0 -> 255 értéket képviselhet.
A 8 bites egész számok meglehetősen korlátozóak. A C / C ++ int-nek legalább -32 678 -> + 32 767 értéket kell képviselnie, így az int16_t-hez társul - a legkisebb mérethez. Ez jó egyensúlyt biztosít a hatótávolság és a hatékonyság között. Ez különösen akkor fontos, ha a kezdők tanulnak - a túlcsordulást nem igazán értik a nem programozók.
Ennek azonban teljesítményre van hatása, mert a legtöbb 16 bites művelet legalább kétszer annyi időt vesz igénybe, mint egy 8 bites műveletet, és kétszer annyi regisztert használjon. Lehet, hogy ez nem tesz számotokra változást.
Sokan áttérünk a natív típusokra, például az int8_t és az uint8_t, mivel ez sokkal nagyobb irányítást biztosít Önnek.
A C és a C ++ nyelvekkel kapcsolatban fontos tény, hogy a megfelelő szabványok nem határozzák meg az integrált és a lebegőpontos számok típusának méretét (bájtban).
Csak minimális tartományokat és összefüggést határoznak meg ezek között , pl
range (short) < = range (int) < range (long)
Tehát pl. egy int
általában a következőktől függ: