mikrocontroller.net

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


Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja sorry, das ist mir klar! Habe ich in meinem Prog auch gemacht!

Ich habe das nur so als Prinzip augeschrieben!!!

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!)

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

Matthias

Autor: Fabian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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!!!

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vor allem solltest Du erstmal Deine klemmende Ausrufezeichentaste
reparieren.

Autor: m@is (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
g

Autor: Matthias Larisch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.