Forum: Mikrocontroller und Digitale Elektronik MSP430 TimerA Interrupt + externer Variable


von Daniel S. (nasenschleim)


Angehängte Dateien:

Lesenswert?

Hallo,

ich wollte mir eine Delayfunktion über den TimerA basteln. In meinem 
Beispiel soll das Delay 1 Sekunde betragen. Der Timer funktioniert 
Interrupt gesteuert. Solange ich den Timer in der main.c initialisiere 
und dort auch die Routine abgearbeitet wird, läuft das alles.
Wenn ich jetzt die Timer-Initialisierung und die Routine auslagere, habe 
mir eine Datei TIMER.c und TIMER.h angelegt, dann funktioniert das ganze 
nicht mehr.
Ich vermute das es etwas mit der Variable "timer" zu tun hat. Habe Sie 
als extern und volatile deklariert, trotzdem funktioniert es nicht.

Würde mich freuen, wenn Ihr mir etwas auf die Sprünge helfen könntet.

PS: - verwendet wird der MSP430f169
    - Software Code Composer Studio 4_1_3
    - im Anhang der Quellcode

von Jörg S. (joerg-s)


Lesenswert?

Was heisst "funktioniert nicht"?

von Erik (Gast)


Lesenswert?

vielleicht kannst du die Variable nur im Hauptprogramm deklarieren ?

mfg Erik

von Daniel S. (nasenschleim)


Lesenswert?

Ahso, habe ich ja ganz vergessen zu schreiben was nicht funktioniert.

Also wenn ich alles in der Main compiliere, dann funktioniert die 
Funktion wie gewünscht. Das heißt ich komme auf ein Delay, von ca einer 
Sekunde und somit wird der Text "Test123456" auch nur jede Sekunde 
gesendet.

Baue ich das Programm aber so auf, wie in den Dateien gezeigt. Das heißt 
die Funktion für die TimerA-Initialisierung und auch die Auswertung der 
Timervariable in TIMER.c lege. Dann sendet er die ganze Zeit (ohne 1 
Sekunde Pause) "Test123456". Das heißt er springt gar nicht in die 
Delay-Funktion rein. Ich kann mir das nicht erklären, denn ich habe ja 
den selben Code, welcher ja funktioniert, nur in TIMER.c ausgelagert.

Seht Ihr vielleicht mein Fehler, oder habe ich vergessen eine 
Headerdatei einzubinden? Aber dann würde der Compiler, ja beim 
compilieren meckern...

Schon mal vielen Dank.

von Karl H. (kbuchegg)


Lesenswert?

Das hier
1
  while(1)
2
  {
3
    senden_String_UART1("Test123456\n");
4
    
5
  void timera_1sek();

ist kein Funktionsaufruf.
Das deklariert, das es eine Funktion namens timera_1sek gibt, dass über 
die Argumente nichts näher bekannt ist und dass sie nichts 
zurückliefert.

Das hier
1
  while(1)
2
  {
3
    senden_String_UART1("Test123456\n");
4
    
5
    timera_1sek();
wäre ein Funktionsaufruf.

von Daniel S. (nasenschleim)


Lesenswert?

Hallo,

ja das macht Sinn. Werde ich am Montag gleich mal testen und 
anschließend eine Rückmeldung geben.

Ich wünsche euch ein schönes Wochenende.

von Daniel S. (nasenschleim)


Lesenswert?

Guten Morgen,

ja es war genau das void.
Irgendwann sieht man den Wald vor lauter Bäumen nicht mehr... :-(
Danke für die Hilfe.

Gruß, Daniel.

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.