Schleife

Gast #449815
Lesenswert?
• ▲
▼
Hallo,
ich habe fogendes Problem:
Programmiere ich folgende Zeilen, so zeigt mir das Display ein falsches 
Ergebnis:
1
unsigned char page=15;
2
do 
3
{
4
   LCD_SET_PAGE(page);
5
   ..
6
   page--;
7
}
8
while(page>=0);
aber wenn ich folgendes schreibe habe ich das richtige Ergebnis
1
unsigned char page=16;
2
do
3
{
4
   LCD_SET_PAGE(page-1);
5
   ..
6
   page--;
7
}
8
while(page>0);

Warum?
Das ganze zeigt sich auch bei einer for-Schleife.

Page 0-15 sind die 16 Zeilen eines Display.
.. folgt eine Buchstabenausgabe

Bei ersten Code fehlt in der Zeile Null
Gast #449854
Lesenswert?
• ▲
▼
Etwas besser, zumindest für portablen Code, wäre eigentlich noch 
int_fast8_t. int8_t ist zwar beinahe genauso portabel (könnt ja sein, 
dass es keinen 8-bit-Typ gibt), aber int_fast8_t ist der schnellste Typ, 
der mindestens 8 Bit hat, im Gegensatz zu int8_t, der immer exakt 8 Bit 
breit ist. Bei 16- oder 32-bit-Prozessoren sind die größeren Typen oft 
schneller.
Moderator Persönliche Seite #449943
Lesenswert?
• ▲
▼
Rolf Magnus wrote:

> Etwas besser, zumindest für portablen Code, wäre eigentlich noch
> int_fast8_t.

...oder int_least8_t. ;-)  Nehmen sich wahrscheinlich beide nicht
viel.

Es ist aber interessant, wenn man mal nach uint8_t gugelt, so ist
AVR-GCC mittlerweile wohl im vorderen Feld derer zu finden, dessen
Nutzer sich an die <stdint.h>-C99-Datentypen gewöhnt haben.
Gast #449987
Lesenswert?
• ▲
▼
>> Etwas besser, zumindest für portablen Code, wäre eigentlich noch
>> int_fast8_t.
>
>...oder int_least8_t. ;-)  Nehmen sich wahrscheinlich beide nicht
> viel.

Im Prinzip halte ich es für am besten, die int_fastX_t im Normalfall zu 
benutzen. Falls das Sparen von Speicher besonders wichtig ist, die 
_least_-Version, und nur, wenn man exakte Größen braucht, weil man z.B. 
ein wraparound benötigt oder mit Hardwareregistern fummelt, die 
intX_t-Variante mit genau definierter Größe. Bei Mikrocontrollern 
benutze ich aber auch meistens auch nur die letztere oder halt einfach 
int. Bisher hatte ich auch noch kein AVR-Programm, das ich auf eine ganz 
andere Plattform (16, 32, 64 Bits) portieren mußte.

> Es ist aber interessant, wenn man mal nach uint8_t gugelt, so ist
> AVR-GCC mittlerweile wohl im vorderen Feld derer zu finden, dessen
> Nutzer sich an die <stdint.h>-C99-Datentypen gewöhnt haben.

Naja, selbst fast 8 Jahre nach Einführung von C99 und Ableben von C89 
ist die Unterstützung wohl immer noch recht mau. Auf größeren 
Plattformen braucht man selten Typen mit exakt 8 Bit, deswegen ist es 
nicht so verwunderlich, dass AVR-GCC da ziemlich weit vorne mitspielt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren