Forum: Mikrocontroller und Digitale Elektronik PIC - Sourcefehler aber was??


von Dan (Gast)


Angehängte Dateien:

Lesenswert?

Guten Tag, Leute.

Ich hab ein Problem und zwar beim Compiler MPLAB X IDE mit C18
kommt dauernd der die Fehler ( siehe Anhang ).
Aber ich find keine Fehler und nen Freund von mir hat es auch schon 
angeschaut, aber hat auch keine Ahnung.
Habt ihr ein Rat für mich?
Gruß Dan

#define LCD_DATAPORT    PORTD  //Port für die 4 Datenleitungen
#define LCD_DATAPORTDR    DDRD
#define LCD_DATA0      4
#define LCD_DATA1      5
#define LCD_DATA2      6
#define LCD_DATA3      7
#define LCD_SETPORT      PORTA  //Port für die 4 Steuerleitungen
#define LCD_SETPORTDR    DDRA
#define LCD_E        0
#define LCD_RS        2
#define LCD_RESET                       3

//-----------------------------------------------------------------//
//    Display Befehle
//-----------------------------------------------------------------//
#define LCD_CLEAR    0b00000001    //Löschen des Display, Cursor auf 
Home
#define LCD_FUNCTION    0b00100100    //4-Bitmodus, RE=1
#define LCD_FUNCTION2    0b00100000    //4-Bitmodus, RE=0
#define LCD_CONTROL    0b00001100    //Display ON, Cursor OFF, Blinken 
OFF
#define LCD_CONTROL2    0b00001101    //Display ON, Cursor OFF, Blinken 
ON
#define LCD_CONTROL3    0b00001110    //Display ON, Cursor ON, Blinken 
OFF
#define LCD_CONTROL4    0b00001111    //Display ON, Cursor ON, Blinken 
ON
#define LCD_EXTENDED    0b00001001    //5-Dot Fontwidth, Normal Cursor, 
4 Lines
#define LCD_ENTRYMODE    0b00000110    //Segment Bidirectional Function 
(Seg1->Seg60)
#define LCD_DDRAM    0b10000000    //DDRAM Adresse setzen

//-----------------------------------------------------------------//
//    Zeilenadressen und Länge einer Zeile
//-----------------------------------------------------------------//

#define LCD_LINE1      0x00
#define LCD_LINE2      0x20
#define LCD_LINE3      0x40
#define LCD_LINE4      0x60





void pause_us (int us)
{
  int y=us;
  while(y>0)
        {
                for(y;y != 0;y--)
                {
                    for(y;y != 0;y--);
                }


  }
}

//Display Enable
void display_enable(void)
{
  LCD_SETPORT&=~(1<<LCD_E);        //RS Low
  LCD_SETPORT|=(1<<LCD_E);        //RS High
        pause_us(50);
  LCD_SETPORT&=~(1<<LCD_E);        //RS Low
}

//Byte senden
void display_send(char byte)
{
  LCD_DATAPORT=(byte&0b11110000);      //1. High Nibble senden
  display_enable();
  LCD_DATAPORT=(byte<<4);        //2. Low Nibble senden
  display_enable();
  pause_us(100);
}

//Datenbyte senden
void display_data(char byte)
{
  LCD_SETPORT|=(1<<LCD_RS);        //RS High
  display_send(byte);
}

//Befehlsbyte senden
void display_command(char  byte)
{
  LCD_SETPORT&=~(1<<LCD_RS);        //RS Low
  display_send(byte);
  pause_us(2000);
}

//Display löschen, Cursor auf Home
int display_clear(void)
{
  display_command(LCD_CLEAR);
  return 1;
}

//Text ausgeben
int display_text(char *text)
{
  int z=0;
  while(text[z]!='\0')
        {
    display_data(text[z]);
    z++;
  }
  return 1;
}

//Cursor positionieren
int display_position(int z, int s)
{
        int   LCD_LINELENGTH =                20;
        int   LCD_LINES =      4;

        char addr;
  if(z>LCD_LINES || s>LCD_LINELENGTH)
                return 0;
                addr=LCD_LINE1;
  if(z==2)
    addr=LCD_LINE2;
  if(z==3)
    addr=LCD_LINE3;
  if(z==4)
    addr=LCD_LINE4;
  addr+=s;
  addr|=LCD_DDRAM;
  display_command(addr);
  return 1;
}

//Text an Position ausgeben
int display_ptext(char *text, int zeile, int spalte)
{
  display_position(zeile, spalte);
  display_text(text);
  return 1;
}

int display_init(void)
{
  pause_us(15000);
  LCD_DATAPORTDR|=(1<<LCD_DATA0);    //Pins als Ausgänge konfigurieren
  LCD_DATAPORTDR|=(1<<LCD_DATA1);
  LCD_DATAPORTDR|=(1<<LCD_DATA2);
  LCD_DATAPORTDR|=(1<<LCD_DATA3);
  LCD_SETPORTDR|=(1<<LCD_RS);
  LCD_SETPORTDR|=(1<<LCD_E);
  display_command(LCD_CLEAR);    //1
  display_command(LCD_FUNCTION);    //2
  display_command(LCD_CONTROL);    //3
  display_command(LCD_FUNCTION2);
  display_command(LCD_ENTRYMODE);    //4
  display_command(LCD_FUNCTION);
  display_command(LCD_EXTENDED);    //5
  display_command(LCD_FUNCTION2);
  display_command(LCD_CLEAR);    //8
  return 1;
}

von Peter II (Gast)


Lesenswert?

ich bezweife erstmal das deine

void pause_us (int us)

funktion in der Praxis funktioniert. Der compiler ja nicht dumm und wird 
sie dir komplett wegoptimieren.

Lade mal die echten Dateien hoch, sonst hat man dcoh kein überblick was 
in welcher Datei steht.

von Dan (Gast)


Lesenswert?

Was meinst du mit echten Datein?

Meine Frage ist warum er die einzelnen void - Befehle keine "Wirkung" 
bzw. neudefiniert werden müssen??

von Peter D. (peda)


Lesenswert?

Das ist Mumpitz.
Was soll man mit einem *.jpg anfangen?

Kopiere die erste Fehlermeldung als Klartext hier rein.
Und dann hänge benanntes *.h ran, damit man die benannte Zeile sehen 
kann.
Bzw. auch die *.c, welche das *.h einbindet.


Peter

von Chris (Gast)


Lesenswert?

Delay von Microchip.

#include <delays.h>
void Delay1TCY ( void ); // Delay one instruction cycle.
void Delay10TCYx ( unsigned char unit ); // Delay in multiples of 10 
instruction cycles.
void Delay100TCYx ( unsigned char unit ); // Delay in multiples of 100 
instruction
cycles.
void Delay1KTCYx ( unsigned char unit ); // Delay in multiples of 1,000 
instruction
cycles.
void Delay10KTCYx ( unsigned char unit ); // Delay in multiples of 
10,000 instruction

von Dan (Gast)


Angehängte Dateien:

Lesenswert?

Also im Anhan sind die c File und die h Files
und die Fehlermeldungen.

Hoffe das meintest du ;)

Gruß Dan

von Oliver (Gast)


Lesenswert?

Der größte Teil der Probleme kommt daher, daß du in deinen 
(zusammenkopierten???) header-Files keine include guards benutzt, und 
diese mehrfach eingebunden werden.

http://de.wikipedia.org/wiki/Include_Guard

Die dann noch verbleibenden Fehlermeldungen lassen sich mit Hilfe eines 
C-Buchs einfach lösen.

Oliver

von Peter D. (peda)


Lesenswert?

"display_help.h:8:Error [1178] illegal declaration of object of type 
void"

Eine Variable kann nicht void sein.


Peter

von Krapao (Gast)


Lesenswert?

Du hast Definitionen von Funktionen in den Includedateien (*.H). Und 
weil du die Includedatei zweimal in Hauptprogramm1.c includierst, einmal 
direkt und einmal indirekt über MP3_Driver.h, werden die 
Redefinition-Fehlermeldungen provoziert.

> void Delay1TCY;

Da fehlen die Funktionsklammern was zum Fehler 
"C:\Users\Dave\Desktop\NN\Programm\Projekt.X\display_help.h:8:Error 
[1178] illegal declaration of object of type void" führt.

Den eigentliche Sinn der Includedateien, nämlich darin Deklarationen 
(Prototypen) für Funktionen anzugeben, machst du mit den extern 
Deklarationen in Hauptprogramm1.c. Weil die Deklarationen dort aber 
nicht 100% zu den Definitionen in der Includedateien passen, kommt es zu 
den Tedeclaration-Fehlermeldungen.

>    unsigned char buf[20];
>    buf = "Next druecken!";

Geht in C nicht. Schau dir die strcpy() Funktionen aus den C-Library an, 
wie man Arrays zur Laufzeit ändert. Oder wie man Arrays 
(String-Variablen) zur Compilezeit initialisiert.

von Chris (Gast)


Lesenswert?

Die Fehlermeldung ist klar, du inkludierst ein .c File als .h File.
Möglich, aber wenn du dann gleichzeitig die bereits definierten 
Funktionen
als  "extern" declarierst, hast du ein Deklarierungsproblem. Dies meldet
der Compiler. Du includierst ja schon display_help.h, dann brauchst du
sie nicht nochmals declarieren.
Weiters, nach dem include von delay.h kannst du die Funktionen nutzen
und nicht nochmals declarieren.
void Delay1TCY;
void Delay10TCYx ( unsigned char unit ); // Delay in multiples of 10
void Delay100TCYx ( unsigned char unit ); // Delay in multiples of 100
void Delay1KTCYx ( unsigned char unit ); // Delay in multiples of 1,000
void Delay10KTCYx ( unsigned char unit ); // Delay in multiples of


Normalerweise declariert man eine Variable z.B. für 4Mhz OSC
#define _XTAL_FREQ 4000000

und dann z.B.
#if _XTAL_FREQ/(1000*4)/4/10 > 255
#define delay_250us() 
(Delay100TCYx((1599+_XTAL_FREQ)/(999*4)/4/100),Delay10TCYx(9))
#else
#if _XTAL_FREQ/(1000*4)/4 > 255
#define delay_250us() Delay10TCYx((159+_XTAL_FREQ)/(999*4)/4/10),
#else
#define delay_250us() do { char _t=(_XTAL_FREQ+15)/(999*4)/4; 
while(_t--) Delay1TCYx(); } while(0)
#endif
#endif
#endif

delay_ms(int val) { if(val) while(val--) {
             delay_250us();
             delay_250us();
             delay_250us();
             delay_250us();
           }
}

von Oliver (Gast)


Lesenswert?

Chris schrieb:
> Die Fehlermeldung ist klar, du inkludierst ein .c File als .h File.

????

Oliver

von Chris (Gast)


Lesenswert?

Das display_help.h ist eigentlich ein .c File , da dort Funktionen 
definiert sind.

Richtig wäre ein display_help.h zu erstellen mit folgendem Inhalt:

void display_init(void);
void display_clear(void);
void display_text(char *text);
void display_ptext(char *text,int zeile,int spalte);
void display_position(int z, int s);
void display_enable(void);
void display_send(char byte);
void display_data(char byte);
void display_command(char byte);
void controller_init(void);

zusammen mit folgenden code

#define LCD_DATAPORT    PORTD  //Port für die 4 Datenleitungen
#define LCD_DATAPORTDR    DDRD
#define LCD_DATA0      4
#define LCD_DATA1      5
#define LCD_DATA2      6
#define LCD_DATA3      7
#define LCD_SETPORT      PORTA  //Port für die 4 Steuerleitungen
#define LCD_SETPORTDR    DDRA
#define LCD_E        0
#define LCD_RS        2
#define LCD_RESET                       3

//-----------------------------------------------------------------//
//    Display Befehle
//-----------------------------------------------------------------//
#define LCD_CLEAR    0b00000001    //Löschen des Display, Cursor auf 
Home
#define LCD_FUNCTION    0b00100100    //4-Bitmodus, RE=1
#define LCD_FUNCTION2    0b00100000    //4-Bitmodus, RE=0
#define LCD_CONTROL    0b00001100    //Display ON, Cursor OFF, Blinken 
OFF
#define LCD_CONTROL2    0b00001101    //Display ON, Cursor OFF, Blinken 
ON
#define LCD_CONTROL3    0b00001110    //Display ON, Cursor ON, Blinken 
OFF
#define LCD_CONTROL4    0b00001111    //Display ON, Cursor ON, Blinken 
ON
#define LCD_EXTENDED    0b00001001    //5-Dot Fontwidth, Normal Cursor, 
4 Lines
#define LCD_ENTRYMODE    0b00000110    //Segment Bidirectional Function 
(Seg1->Seg60)
#define LCD_DDRAM    0b10000000    //DDRAM Adresse setzen

//-----------------------------------------------------------------//
//    Zeilenadressen und Länge einer Zeile
//-----------------------------------------------------------------//

#define LCD_LINE1      0x00
#define LCD_LINE2      0x20
#define LCD_LINE3      0x40
#define LCD_LINE4      0x60



und in display_help.c
ein #include "display_help.h" haben
sowie die defines abändern wie folgt als Beispiel.
#ifndef LCD_DDRAM
... dieselben defines wie oben
#endif

Und natürlich das display_help.c zum Projekt hinzufügen.
auch die definitionen von Delay... sind falsch und führen zu 
Fehlermeldungen, und sind bereits in <delay.h> includiert.

von Dan (Gast)


Angehängte Dateien:

Lesenswert?

Hey Leute,

ich dank euch, habt ihr echt geholfen.
Aber ich hab paar Fehler, die eigentlich keinen Sinn machen.
Denn eigentlich müsste es korrekt sein oder seh ich das was falsch.
Hab die neuen Codes angehängt mit den Fehlermeldungen.

Gruß Dave

von Dan (Gast)


Lesenswert?

Sorry wegen den Grammatikfehler -.-
Hab ich erst jetzt gemerkt.

von hachja (Gast)


Lesenswert?

Dein
"int display_text(unsigned char Info,unsigned char k)"
tut bestimmt nicht das, was Du Dir erhoffst, wenn Du es aufrufst.
Evtl. verschwindet der Großteil der Fehler, wenn Du die Funktion richtig 
machst. 3 Post hier drüber von Chris ist ja schon ein Hinweis dazu drin 
;)

von Kevin (Gast)


Lesenswert?

und was ist mit dem Syntak Error.
Der macht doch keinen Sinn, halt ganz am Schluss vom C Main File.
Ich find da kein Fehler

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Kevin schrieb:
> und was ist mit dem Syntak Error.
> Der macht doch keinen Sinn, halt ganz am Schluss vom C Main File.

Typischerweise geht man "von pben nach unten" vor. Weiter unten können 
durchaus Folgefehler aufgeführt sein, welche gar keine Fehler sind. Der 
Compiler ist halt durch den ersten Fehler aus dem Tritt gekommen, und 
weiß unten nicht mehr ob er Männlein oder Weiblein ist, und meldet 
merkwürdige Sachen ...

Was ist denn mit dem Fehler in Zeile 129? Hast du den denn schon 
beseitigt?

von B. L. (b8limer)


Lesenswert?

Dan schrieb:
> Hey Leute,
>
> ich dank euch, habt ihr echt geholfen.
> Aber ich hab paar Fehler, die eigentlich keinen Sinn machen.
> Denn eigentlich müsste es korrekt sein oder seh ich das was falsch.
> Hab die neuen Codes angehängt mit den Fehlermeldungen.
>
> Gruß Dave

Servus,

ich hab mir mal deinen Code ein bisschen angeschaut. Was kommt ist 
allgemeine Kritik, einfach z.T. "nicht üblicher" Code. Ich denke mal du 
bist noch ein bisschen Anfänger ....

>LATA = LATB = LATC = LATD = LATE = 0x00;

Sowas macht man nicht. Die Operatorenreihenfolge ist zwar von rechts 
nach links aber machen tut man's nicht.
1
display_text('MP3-Wecker',1);

Mich wundert, dass dein Compiler dich nicht mit Fehlermeldungen 
überschüttet. In C sind Zeichenketten Strings immer in doppelten 
Anführungsstrichen (") zu indizieren. Mit einfachem Hochkomma werden nur 
einzelne Zeichen indiziert 'a' bzw. die Hilfszeichen '\n' sobald es aber 
mehr als ein Zeichen ist, ist z.B. "MP3-Wecker" Pflicht. Das sind auch 
einige Fehler die weiter unten kommen.
1
    unsigned int k;
2
    unsigned int m;
3
    unsigned int l;
4
    int g;
5
    int b;
6
    int c;
7
    int d;
8
    int e;
9
    int f;
10
    int h;
11
    int x;
12
    int z;
13
    unsigned int y;
14
    x=0;
15
    z=0;
16
    y=2012;

Du musst generell Code übersichtlicher gestalten. Ansonsten kann man 
gerade wenn man dir helfen will nicht so gut erkennen was du vor hast.
Obriger Code ist auf wenige Zeilen komprimierbar:
1
unsigned int k,l,m,y=2012;
2
int g,b,c,d,e,f,h,x=0,z=0;

Das wars schon - 2 Zeilen
1
  if(PFEIL_HOCH == 1 || PFEIL_RUNTER ==1 || MODE == 1 || NEXT ==1 || ALARM == 1)
2
         {
3
             entprell();
4
         }

Alle Kontrollstrukturen (wie if, ...) die in ihrem Anweisungblock nur 
eine einzige Anweisung haben (wie hier "entprell();"), da kann man sich 
die geschweiften Klammern sparen:
1
  if(PFEIL_HOCH == 1 || PFEIL_RUNTER ==1 || MODE == 1 || NEXT ==1 || ALARM == 1)entprell();

Das solltest du vielleicht mal Konsquent bei deinem Code anwenden.

Des weiteren musst du strikter Formatieren. So verliert man einfach den 
Überblick. Du hast dich z.B. zum glück für eine einheitliche 
Formatierung entschieden. z.B
1
do
2
{
3
if(irgendwas)
4
{
5
}
6
else
7
{
8
}
9
}

jetzt hast du aber noch asslig viel drin in dieser do-Schleife. Da kann 
keiner den Überblick behalten. Darum solltest du dann einrücken.
1
do
2
{
3
   if(irgendwas)
4
   {
5
   }
6
7
   else
8
   {
9
   }
10
}

So kann man es schon besser erkennen!


Noch eine letzte Sache
1
         if(PFEIL_HOCH == 1 && PFEIL_RUNTER==0)
2
         {
3
4
             z++;
5
             if(z == 13)
6
             {
7
                 z=1;
8
             }
9
             display_text(z,1);
10
11
         }
12
         else if (PFEIL_RUNTER == 1 && z != 0 && PFEIL_HOCH == 0 && z != 0)
Warum denn diese vielen Leerzeilen und dann auch noch an den falschen 
Stellen?
1
         if(PFEIL_HOCH == 1 && PFEIL_RUNTER==0)
2
         {
3
             z++;
4
             if(z == 13)
5
             {
6
                 z=1;
7
             }
8
             display_text(z,1);
9
         }
10
11
         else if (PFEIL_RUNTER == 1 && z != 0 && PFEIL_HOCH == 0 && z != 0)

So viel besser ....


Mach mal die Zeichenketten richtig und kompiliere dann nochmal.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

@Dan:

    unsigned int k;
    unsigned int m;
    unsigned int l;
    int g;
    int b;
    int c;
    int d;
    int e;
    int f;
    int h;
    int x;
    int z;
    unsigned int y;
    x=0;
    z=0;
    y=2012;

Und du bist dir sicher, daß du in einer Woche noch weißt, welche 
Funktion die einzelnen ein-buchstabigen Bezeichner haben, und warum 
grade der Wert 2012 verwendet wurde (möglicherweise das Geburtsdatum 
deines Hamsters?)

Ist den bei PIC nicht erlaubt, Bezeichner mit mehreren Buchstaben zu 
benutzen?

Wenn du Bezeichner nutzt wie zaehlindex_links, zaehlindex_rechts, 
zwischenzaehler_taste1, etc. dann ist es zwar EINMAL etwas mehr 
Schreibaufwand, aber das Programm liest sich danach "wie ein Buch", d.h. 
es ist ab dann immer und überall lesbar und durch die sprechenden 
Bezeichner-Namen direkt kommentiert.

von Kevin (Gast)


Lesenswert?

@hachja: ich verstehs grad nicht, habs so gemacht wie Chris es mir 
empfholen hat

@B. Limer: Naja habs jetzt gemacht wie du es empholen hast, aber 
geholfen hats nicht. Und ich finds jetzt ein bisschen unübersichtlicher,
aber ist halt geschmackssache, trotzdem danke ;)

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

_DAN_ schrieb:
> Guten Tag, Leute.

_Kevin_ schrieb:
> habs jetzt gemacht wie du es empholen hast,
> aber geholfen hats nicht

Tja, ist ein Fall von Persönlichkeitsspaltung. Deswegen funktioniert es 
auch nicht ;-)

von Kevin (Gast)


Lesenswert?

@Wegstaben Verbuchsler:

Wir sind zu zweit, wenn man darüber länger nachdenkt,
dann kommt man selber drauf oder??
Und von dir kamen bisher keine Lösungsvorschläge... ;)

von Chris (Gast)


Lesenswert?

Ich beziehe mich auf die oben geposteten Files + Error.
Hast du dir die Zeilen mal angesehen wo der error rauskommt + Warning ?
LATA=LATB=LATC=0; ist gängige C Programmierung wennauch sie hier weniger
Sinn macht, das stimmt, aber darum geht es ja nicht.

Warning ist, weil du 'text' anstelle von "text" benutzt, das ist
eigentlich ein Error.
Aber da ist noch ein großer Fehler bei dir im Kopf,

int display_text(unsigned char Info, unsigned char k);

wobei du es aber so benutzt,
 display_text('Fehler',1)
wie auch
         y=2012;
         y++;
         display_text(y,1);

unsigned char ist ein Wert zwischen 0 und 255
vielleicht wolltest du :
int display_text(unsigned char *Info, unsigned char k);

oder willst vielleicht in Python programmieren, wo egal ist ob
char oder int oder string.


Das Error ist
   ALARM_EIN = 1

wobei
#define ALARM_EIN           4

definiert ist,
also
   4 = 1
da aber eien Zuweisung auf eine nicht Variable ein Fehler ist,
syntax error.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Kevin schrieb:
> Und von dir kamen bisher keine Lösungsvorschläge... ;)

Der Vorschlag, sprechende Bezeichner zu verwenden, hab ich nicht aus Jux 
gemacht, sondern dir (euch) in euren Programmierfähigkeiten zu 
unterstützen.

Desgleichen der Hinweis auf "Fehler von oben nach unten abarbeiten", und 
auch mal die gleichartigen Fehler in Zeile 129 und folgende zu verstehen 
und zu beseitigen.

Wurde aber anscheinend nicht so wahrgenommen.

von hachja (Gast)


Lesenswert?

Chris hat es zwar nun schon verdeutlicht aber:

Du hast gemacht:
int display_text(unsigned char Info,unsigned char k);
Der Vorschlag war:
int display_text(unsigned char *Info, unsigned char k);

Der kleine Stern macht einen großen Unterschied (Stichwort: Pointer / 
Zeiger)

von Chris (Gast)


Lesenswert?

Ja, aber er macht auch solchen Code:
     y=2012;
         y++;
         display_text(y,1);

Also eine reine Änderung in char* sowie Änderung  von 'text' in "text"
ist zwar der halbe Weg, aber eben nicht alles, bzw kann das dann auch
zum Absturz des Programmes führen, wenn nicht führt sicher zum Absturz 
des
Programmes.

von Dan (Gast)


Lesenswert?

@Chris:

ja das war dumm von mir, tut mir leid.
Aber wie kann man den Zahlenwert einer Variable ausgeben??

von Chris (Gast)


Lesenswert?

itoa als Beispiel, ev. mit display_num() .
Was ich ausdrücken wollte, die Funktion display_text(char*s,char i)
macht nicht das was man erwarten würde, da fehlt noch was an 
funktionalität.

von Peter D. (peda)


Lesenswert?

Chris schrieb:
> LATA=LATB=LATC=0; ist gängige C Programmierung

Nö, sondern nur ne schlechte Angewohnheit.

Erzeugt erstens mehr Code, da die IO-Register zurückgelesen werden 
müssen.
Und zweitens kann es Fehler bewirken. Wenn in einem Register nicht alle 
Bits implementiert sind, liest man Unsinn zurück und weißt es dem 
nächsten Register zu.


Peter

von Mirosa (Gast)


Lesenswert?

> Chris schrieb:
>> LATA=LATB=LATC=0; ist gängige C Programmierung
>
> Nö, sondern nur ne schlechte Angewohnheit.
>
> Erzeugt erstens mehr Code, da die IO-Register zurückgelesen werden
> müssen.

Alle Register werden direkt auf 0 gesetzt. Da wird nichts zurückgelesen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.