Hallo _HP_,
Zitat Zitat von _HP_
Hallo Hermann,

danke für den Tipp.

Liegt es an dem zu einfachen Beispiel, oder denke ich schief - aber ich bekomme diese Fehler schon vom Compiler angezeigt:
...
da hast Du natürlich Recht, zuerst sollte man mittels avr-gcc -Wall ... schauen, was der Compiler so von sich gibt. Wenn man da nicht fündig wird, und trotzdem noch komisches Verhalten im Programm hat, kann ja mit splint weitermachen.

Ich habe mal die Dateien der Asurolib unter die Lupe genommen, und unter den unheimlich vielen (wahrscheinlich) harmlosen Meldungen zumindest zwei gefunden, welche nicht bei avr-gcc -Wall ... reported werden:
  • In diesem Fall brennt nichts an wegen AND mit 0x00, aber da sollte besser eine Zuweisung stehen ...
    Code:
    ...
    lcd.c:117:3: Variable dataPins used before definition
      An rvalue is used that may not be initialized to a value on some execution
      path. (Use -usedef to inhibit warning)
    ...
    
    ==============================================
    ...
    void SetDataLCD(unsigned char data)
    {
      unsigned char dataPins;             // Pin Compatibility
    
      // Set First Nibble Data to DataPins on PCF8574
      dataPins &= 0x00;                                           <<<---- Zeile 117
      dataPins |= ((data & 0x80) >> 7) << LD7;
      dataPins |= ((data & 0x40) >> 6) << LD6;
      dataPins |= ((data & 0x20) >> 5) << LD5;
      dataPins |= ((data & 0x10) >> 4) << LD4;
    ...
    ==============================================
  • Unreachable Code in Form des return 0; in main() nach dem while (1); sind wir ja gewohnt, aber in PCDemo hat sich da noch eine Stelle eingeschlichen:
    Code:
    ...
    PCDemo.c: (in function PCDemo)
    PCDemo.c:147:7: Unreachable code: break
      This code will never be reached on any possible execution. (Use -unreachable
      to inhibit warning)
    ...
    
    ============================================
    ...
        switch (cmd)
        {
        case RWD_KEY :
          PCRwd();
          break;
        case FWD_KEY :
          PCFwd();
          break;
        case LEFT_KEY :
          PCLeft();
          break;
        case RIGHT_KEY :
          PCRight();
          break;
        case STOP_KEY :
          PCStop();
          break;
        case ESC_KEY :
          return;
          break;                         <<<--- Zeile 147
        }
    ...
    ============================================