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
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.
Ja sorry, das ist mir klar! Habe ich in meinem Prog auch gemacht! Ich habe das nur so als Prinzip augeschrieben!!!
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!)
Hi was für ein Controller? Auf einem Mega128 dürfte Buffer[1000] kein großes Problem sein. Auf einem Tiny26 schon. Matthias
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!!!
Vor allem solltest Du erstmal Deine klemmende Ausrufezeichentaste reparieren.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.