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

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.