Forum: Compiler & IDEs PC - (RS-232) - uC


von Fabian (Gast)


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

von Jörg Wunsch (Gast)


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.

von Fabian (Gast)


Lesenswert?

Ja sorry, das ist mir klar! Habe ich in meinem Prog auch gemacht!

Ich habe das nur so als Prinzip augeschrieben!!!

von Fabian (Gast)


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!)

von Matthias (Gast)


Lesenswert?

Hi

was für ein Controller? Auf einem Mega128 dürfte Buffer[1000] kein
großes Problem sein. Auf einem Tiny26 schon.

Matthias

von Fabian (Gast)


Angehängte Dateien:

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!!!

von Jörg Wunsch (Gast)


Lesenswert?

Vor allem solltest Du erstmal Deine klemmende Ausrufezeichentaste
reparieren.

von m@is (Gast)


Lesenswert?

g

von Matthias Larisch (Gast)


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

von Andreas (Gast)


Lesenswert?

Hallo, Nuub,
Bitvariable brauchen maximal ein Byte, bis zu acht davon gehen in ein
Byte, so dass Deine Aussage nicht richtig ist.

Ist im Übrigen nicht nur auf MCs so...

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.