PC - (RS-232) - uC

Gast #76570
Lesenswert?

Hallo Cracks

Ich möchte Daten vom PC an den uC schicken und zwar möchte ich diese
Daten in einem Array ablegen:

Prinzip:

unsigned char Feld[64], counter


UART ISR
{
 Feld[counter] = UDR
 counter++
}



Main
{
 for (;;)
 {
  if (counter == 64)
  {
    counter = 0;
    EEPROM()                    //schreibt die 64 Byte ins EEPROM!
  }
 }
}



Mein Problem:

Die if - anweisung trifft niemals zu! Denn wie ich herausgefunden habe,
zählt der counter bis 20 und danach beginnt er wieder von vorne!!!

Sobald ich das Array nicht in der ISR beschreibe, zählt mein Counter
wieder so wie er muss! Jedoch empfange ich die Daten nicht richtig!

Meine Frage:

Wie macht man das richtig (üblicherweise)?
Muss ich da mit Pointer arbeiten?`
Brauch meine Array - füllung zu lange?

Oder wo liegt der Fehler?


Vielen Dank

Fabian
Gast #76571
Lesenswert?

Davon abgesehen, daß Du massig Semikolons vergessen hast: bitte lies
die Doku.  Wenn Du WinAVR benutzt, unter doc im WinAVR-Verzeichnis,
dort vor allem die avr-libc Doku, und dort zuallererst die FAQ.

FAQ #1: `volatile' vergessen.  Der Zugriff auf `counter' wird vom
Compiler wegoptimiert, weil er nicht weiß, daß das jemand außerhalb
seiner Regie ändern kann.
Gast #76573
Lesenswert?

Ich kann mein Programm morgen mal rein posten!

Aber sollte mein Programm vom Prinzip her funktionieren?

Oder muss ich einen frischen lösungsansatz suchen?

Denn ich habe immer komische Probleme wie z.B. dass diese IF - Abfrage
nicht funktioniert!

kann es auch sein, dass ich zu viele variabeln definiert habe?

( volatile unsigned char feld[64], Buffer[1000]
und sonst ein paar unsigned char - Variablen!)
Gast #76575
Lesenswert?

Es ist ein ATmega 8!!!

Und es liegt an meinem 1000er Array!! Wenn ich diese Variable lösche,
funktioniert das Prog!!!

Wie kann man überprüfen, wie viel Variablen man noch zur verfügung
hat?

Hier noch mein Code!!

Vielen Dank für die Hilfe!




PS: Es geht um meine Elektroniker - Lehre Abschlussarbeit! und ich
kämpfe im moment mit so komischen ereignissen!!!
Angehängte Dateien:
Gast #76578
Lesenswert?

Hi!
Soweit ich weiß (bin allerdings ein richtiger Nuub in Bezug auf µCs),
bruacht JEDE Variable 1 Byte oder mehr, je nach Variablentyp, im SRAM.
Wieviel der AT Mega 8 nun hat, weiß ich nicht. Jedoch braucht ein Array
auc char[1000] nun meiner Meinung nach 1000 Byte, weil es im Prinzip ja
1000 einzelne Char-Variablen sind? Hoffe, dass das so stimmt. Bitte
nicht blind drauf vertrauen, lieber die Bestätigung eines Profis
abwarten.

Matthias Larisch

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