Anfängerproblem PIC XC8 C

OP #3349668
Lesenswert?

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
#3353700
Lesenswert?

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.

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