Registerinhalt wird nicht gespeichert

OP #4557296
Lesenswert?
• ▲
▼
Hallo,

ich habe folgendes Problem, ich habe ein uint8_t Array außerhalb der 
main-Methode deklariert, um es global zu machen. Außerdem benutze ich 
einen USART um serielle Daten zu empfangen.

Nun möchte ich in einer ISR die empfangenen Daten in genau dieses Array 
schreiben.

C-Code:

volatile uint8_t byte_counter;

volatile uint8_t Data_12 [ 36 ];

.... main ( ) ....

ISR ( USART_RXC_vect ) // USART Rx interrupt function
{
  if ( byte_counter == 0 )
  {
    Data_12 [ 0 ] = UDR;
    byte_counter ++;
  }
}

schicke ich nun also seriell eine 255 an den uC, so wird diese erkannt. 
Sobald jedoch der uC die ISR verlässt, scheint die 255 wieder gelöscht 
zu werden! Im gesamten Programm finden jedoch keine weiteren 
schreibzugriffe auf dieses Array statt...

Bitte um Erklärung

LG Christian
#4557345
Lesenswert?
• ▲
▼
Und woher weisst du, dass der UART Interrupt überhaupt funktioniert?

a) denke ich, dass der Timer-Interrupt ihn ständig blockiert
b) denke ich, dass du eigentlich sowas hier im UART-Interrupt machen 
möchtest:
1
ISR ( USART_RXC_vect ) // USART Rx interrupt function
2
{
3
  if ( byte_counter < 35 )
4
  {
5
    Data_12 [ byte_counter ] = UDR;
6
    byte_counter ++;
7
  }
8
  
9
}

c) die Funktion Update_Data() rufst du nicht zufällig doch irgendwo auf?
d) Whitespaces kosten zwar nichts, machen den Code aber auch nicht immer 
lesbarer...
Gast #4557873
Lesenswert?
• ▲
▼
Christian K. schrieb:
> @ Me War nur zum Testen, falls das Problem dort liegt.
>
> Der USART Interrupt funktioniert! Habe ihn gerade mittels Oszi und Pin
> getestet.
>
> Meine Daten werden immer noch nicht gespeichert...

Versuch mal alles was nichts mit dem USART zu tun hat abzuschalten: SPI, 
TIMER, usw.
Damit kannst du ausschliessen, dass ein evtl. falsch konfigurierter 
Funktionsblock fuer den boesen Zauber verantwortlich ist (hab' sowas 
schon erlebt).

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