Registerinhalt wird nicht gespeichert

OP #4557296
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
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
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.