void SetMatrix(void) { const uint8_t PortGndStart = 2; const uint8_t PortGndEnde = 3; const uint8_t PortLedStart = 4; const uint8_t PortLedEnde = 7; uint8_t PortGnd; uint8_t PortLed; // for (PortGnd = PortGndStart; PortGnd >= PortGndEnde; PortGnd++) { // for (PortLed = PortLedStart; PortLed >= PortLedEnde; PortLed++) { // PORTC = PortLed = 1; // __delay_ms(250); // PORTC = PortLed = 0; // } asm("CLRF PORTC"); // if (PortGnd == PortGndStart) { asm("BSF PORTC,2"); // PORTC = PortGnd = 1; // PORTC = PortGnd+1; // PORTC = 0; // } else { asm("BSF PORTC,3"); // PORTC = PortGnd+1; // PORTC = 1; // PORTC = PortGnd = 0; // } // } return; } Hallo Ich habe eine Funktion in C geschrieben und der Compiler meckert nicht aber kompiliert sie auch nicht. Die // habe ich später eingefügt und die asm mal Testweise eingefügt. Meine Frage was ist an den for schleifen falsch und was bei der if Abfrage? Danke Vielleicht weiß jemand eine tolle Beschreibung über Microchip XC8 C
:
Bearbeitet durch User
OK ich raffe nun wo es liegt, ist genau umgekehrt wie in Pascal es muss for (PortGnd = PortGndStart; PortGnd <= PortGndEnde; PortGnd++) { for (PortLed = PortLedStart; PortLed <= PortLedEnde; PortLed++) { heißen. Hat trotzdem gute links um Microchip C zu lernen
Um C zu lernen genügt jedes gute C-Buch. Die Compilerspezifischen Dinge stehen im Manual deines Compilers. Hier gibt es ein allgmeines C-Tutorial: http://pic-projekte.de/wiki/index.php?title=PIC_C_Tutorial
Martin Michael schrieb: > Meine Frage was ist an den for schleifen falsch und was bei der if > Abfrage? for schleifen schreibt man normalerweise in folgender Form:
1 | for(i=0;i<10;i++) |
So sieht man auf den ersten Blick, dass die Schleife genau 10 Mal durchlaufen wird und i am Ende den Wert 10 hat. Dies wird hauptsächlich dazu verwendet, dass du folgendes machen kannst:
1 | #include <stdint.h> |
2 | #define VALUE_SIZE 10
|
3 | |
4 | void foo(void){ |
5 | uint8_t i; |
6 | uint8_t value[VALUE_SIZE]; |
7 | |
8 | for(i=0;i<VALUE_SIZE;i++){ |
9 | value[i]=i; /* Gewuenschter Wert zuweisen */ |
10 | }
|
11 | }
|
Wenn du dort i<=VALUE_SIZE schreibst, wird die Schleife 11 Mal durchlaufen und du greifst auf Speicherbereiche ausserhalb des Arrays zu. Wenn du so einen Murks machen willst, schreib eher i<VALUE_SIZE+1. Dann sieht man auf den ersten Blick, dass es deine Absicht ist, die Schleife 11 Mal durchlaufen zu lassen und nicht versehentlich <= statt < geschrieben hast. Noch was: Wenn du deinen Code richtig einrückst, kann man ihn besser lesen und verstehen, auch du selbst.
Ja Danke Aller Anfang ist schwer, aber so langsam bekomme ich das hin.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.