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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.