Forum: Mikrocontroller und Digitale Elektronik printf bringt HC12 zum Absturz


von Funkenschlosser (Gast)


Lesenswert?

Ich habe ein ganz einfaches Programm mit einem Interrupt und in der 
main-Schleife wird der printf-Befehl genutzt.

Die Interrupt-Routine läuft einwandfrei durch, bis nach dem ersten 
printf der Controller hängen bleibt. Alleine funktioniert der 
printf-Befehl aber.

Wer kann mir helfen?
1
#include <hc12.h>
2
#include <912b32.h>
3
#include <stdio.h>
4
5
int Zaehler=0;
6
int i=1234;
7
8
#pragma interrupt_handler Zeitbasis
9
void Zeitbasis(void)
10
{
11
 TC0 = TCNT + 65530;
12
 
13
 Zaehler++;
14
 putchar('2');
15
 
16
 TFLG1 = 0x01;
17
}
18
19
void main(void)
20
{
21
 *((unsigned char *)0x0be8) = 0x06;    
22
 *((void (**)(void))0x0be9) = Zeitbasis; 
23
   
24
  TSCR=0x80;                               
25
  TMSK2=0x05;                                        
26
  TIOS=0x01;               
27
  TMSK1=0x01;                
28
  TFLG1=0xFF;
29
 
30
  INTR_ON();
31
     
32
  while (1)
33
  {  
34
  if (Zaehler == 50)
35
     {  
36
      printf("Wert: %d \r",i);
37
   
38
    Zaehler = 0;
39
   }   
40
  }  
41
}

von holger (Gast)


Lesenswert?

Ich kenne deinen Controller nicht muss ich vorweg
sagen. Benutzt printf() evtl. putchar() zur Zeichenausgabe?
Dann ist es keine gute Idee putchar() in einem
Interrupt aufzurufen und printf() in main().

von Funkenschlosser (Gast)


Lesenswert?

Das putchar('2') im Interrupt war nur zum Test. Auch ohne das bleibt der 
Fehler unverändert.

Sobald ein printf ausgeführt wird, macht der HC12 nichts mehr.

von crazy horse (Gast)


Lesenswert?

die ganze SChleife vielleicht wegoptimiert? Mal im listing 
nachschauen...
Zaehler als volatile deklarieren...

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.