MSP430 TimerA Interrupt + externer Variable

OP #1943493
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
Angehängte Dateien:
OP #1943784
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.
#1943869
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.

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