Forum: Mikrocontroller und Digitale Elektronik Probleme mit CodeWarrior


von Tom T. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
für mein Studium brauche ich für eine Studienarbeit CodeWarrior. Ich 
habe mir jetzt die neuste Version heruntergeladen und das gegebene 
Programm abgetippt. Leider will dieses Programm nicht so funktionieren 
wie in den Unterlagen. Nach vielen Stunden erfolgloser Fehlersuche wende 
ich mich nun an diese Forengemeinde. Ich bin im Moment im 4. Semester an 
einer FH im Bachelorstudiengang Elektro- und Informationstechnik.

Meine Codewarrior-Version ist 10.6.4.
Das Programm habe ich von den Studienunterlagen einfach abgetippt, will 
aber nicht so recht laufen.
Es handelt sich um ein Lauflicht das in einer Endlosschleife immer 
wieder durchlaufen werden soll. Aber immer wenn ich auf Debug drücke 
kommt die Fehlermeldung das die Variable "PTB" nicht deklariert ist.
Mein Code steht unten und im Anhang. Im Anhang ist auch noch die Datei 
mc9s08ac32.h und die derivative.h.

Viele Kommentare in dem Code stammen auch schon von mir.

Vielen Dank

Mein Code:
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */

// IO Ports
int delay = 5000;    // Variable delay ist ein Integer mit Startwert 
5000

static void Delay (void)  // Unterprogrammm Delay,
{
  int cnt =0;      // Variable cnt ist ein Integer mit Startwert 0
  while (cnt < delay)  // Whileschleife, solange cnt kleiner ist als 
delay durchlaufen
  {
    __RESET_WATCHDOG(); /* feed the dog */ // der Watschdog wird bei 
jedem durchlaufen der While-Schleife zurückgesetzt
    cnt++;    // die Variable cnt wird bei jedem Durchlauf um 1 erhöht
  }
}          // Nachdem Unterprogamm Delay ausgeführt springe wieder 
zurück wo vorher gewesen ist!!

static void LightShow(void)    // Unterprogramm LightShow
{

  unsigned char i;      // Variable i ist unsinged char, d.h. kein 
Vorzeichen von 0 bis 255, nach überlauf wieder Null
  for (i = 1; i > 0; i <<= 1)  // Forschleife (mit i ist 1 starten; 
wiederholen solange i größer 0 ist; was <<=i bedeutet weiß ich nicht)
  {
    PTB = i;            //Daten werden an Port B ausgegeben, woher das 
Programmm dass i Binär umgewandelt
              // an B ausgegeben werden muss? bei mir scheinbar nicht
    Delay();      // nachdem die Lightshow einmal durchgelaufen ist 
springe zum Unterprogramm Delay
  }            // danach wieder hierher springen, das wiederholen bis i 
von 1 bis 0(256) gelaufen ist!!!
}              // Wenn Unterprogramm LightShow (und auch Delay) 
durchlaufen ist springe wieder zurück ins Hauptprogramm

// Hauptprogramm
void main(void)      // Das Hauptprogramm main
{
 // EnableInterrupts;    // Interrupts nicht freigegeben

  DDRB = 0xFF;        // Data Direction Register Port B
              // alle Pins des Port B als Output

  LightShow();      // Springe zum Unterprogramm LightShow und 
durchlaufe es, danach wieder hierher springen

  for(;;)          // Forschleife die immer wieder durchlaufen wird.
  {
    LightShow();    // Springe immer gleich wieder zum Unterprogrammm 
LightShow
  }            // Endlosschleife für die LightShow

}              // Bitte sicherstellen das sie nie diese
              // Funktion verlassen!!

von Daniel V. (danvet)


Lesenswert?

eventuell:

PTB ersetzen durch PTBD
DDRB ersetzen durch PTBDD

obs dann wirklich läuft ist aber nochmal eine andere Frage

von Jötze (Gast)


Lesenswert?

Tom T. schrieb:
> 4. Semester an
> einer FH im Bachelorstudiengang Elektro- und Informationstechnik.

Lauflicht ...

Ja nee, is klar.

von Alex22 (Gast)


Lesenswert?

Daniel V. schrieb:
> PTB ersetzen durch PTBD

Wie in der von dir angehängten MC9s08ac32.h zu sehen scheint das 
Register, auf welches du zugreifen möchtest, PTBD (und nicht PTB) zu 
heißen.
Damit würde ich es mal versuchen...

Grüße,
Alex

von stp (Gast)


Lesenswert?

Hast du in den Projekteinstellungen geschaut, dass der Compiler die 
header Datei finden kann? Das Verzeichnis musst du evtl. manuell 
hinzufügen...

mfg

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.