www.mikrocontroller.net

Forum: Compiler & IDEs schöneres Ausgabeformat von avrdude gesucht


Autor: Alexander Schmeil (knut740)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich finde avrdude zum Auslesen des EEPROMs recht gut zu handhaben,
allerdings ist das Ausgabeformat unpraktisch
( ich benutze -U eeprom:r:ausg.txt:d, aber :h udgl. sind auch nicht 
besser).

Ich habe z.B. die Zahlen von 0-200 ins EEPROM geschrieben. Die 
avrdude-Ausgabe sieht so aus:
0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,
16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,
30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,
44,0,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,
58,0,59,0,60,0,61,0,62,0,63,0,64,0,65,0,66,0,67,0,68,0,69,0,70,0,
....
0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,190,0,
191,0,192,0,193,0,194,0,195,0,196,0,197,0,198,0,199,0,255,255,255,
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,

d.h. zwei Zellen pro Wert und (bei größeren Zahlen) begrenzt auf 255, 
obwohl sowohl Adressen als auch Inhalt mit uint16_t definiert waren.
Mir scheint, mit avrdude ist da nichts mehr zu machen (auch ein dump 
bringt nichts Besseres).

Kann man dann an der EEPROM-Speicherei etwas ändern?
Das zugehörige Programm, das die Zahlen ins EEPROM schreibt, ist aus dem 
Tutorial abgekupfert:
uint16_t adr[200] EEMEM;

int main(void)  
{
  uint16_t myWord,i;
     for (i=0; i<200; i++)
  {
  myWord = i;
    eeprom_write_word(&adr[i], myWord); // schreiben
  } // Ende for
  return(0); 
} 

Ich habe probeweise mal die Schrittweite i verdoppelt, falls der 
Compiler übersehen sollte, daß für ein Wort zwei 1-Byte-Speicherplätze 
reserviert werden müssen. Er übersieht es natürlich nicht und in der 
Ausgabe steht zwischen meinen Zahlen immer zweimal 255.
Gibt es eine andere so bequeme Methode, an den EEPROM-Inhalt zu kommen, 
nur schöner formatiert?

Gruß
Alexander

Autor: Lasse S. (cowz) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist doch alles so, wie's sein soll?

Du schreibst nunmal einen 16 Bit breiten Wert ins EEPROM, von 0 bis 199. 
Danach ist das EEPROM noch von vorher auf 0xFF=255 gesetzt.


Wie möchtest du die Ausgabe denn formatiert haben, bzw. woher soll 
avrdude das wissen?

Gruß
Lasse

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lasse S. schrieb:
> Wie möchtest du die Ausgabe denn formatiert haben, bzw. woher soll
> avrdude das wissen?

er ist anscheinend der Meinung, dass das EEPROM weiß, wie die einzelnen 
Bytes, aus denen es nunmal besteht, zusammenhängen...

Autor: Alexander Schmeil (knut740)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lasse S. schrieb:
> Du schreibst nunmal einen 16 Bit breiten Wert ins EEPROM, von 0 bis 199.
> Danach ist das EEPROM noch von vorher auf 0xFF=255 gesetzt.
>
>
> Wie möchtest du die Ausgabe denn formatiert haben, bzw. woher soll
> avrdude das wissen?

Auch wenn ich größere Zahlen hineinschreibe (z.B. 2000 bis 0), bleibt 
die Aufteilung in low- und high-Byte.
Ich habe im avrdude-Manual nichts gefunden, was aus diesen beiden Bytes 
einen direkt lesbaren Zahlenwert gem. uint16_t macht, wahrscheinlich ist 
avrdude darauf nicht eingerichtet.

Man müßte ein Programm schreiben, was die avrdude-Datei einliest und die 
beiden Bytes zusammensetzt, womit man dann das Rad zum x-ten Male neu 
erfunden hätte.

Vielleicht gibt etwas Fertiges, das das Auslesen und in uint16_t-Format 
bringen am Stück erledigen kann?

mfg

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alexander Schmeil schrieb:
> Ich habe im avrdude-Manual nichts gefunden, was aus diesen beiden Bytes
> einen direkt lesbaren Zahlenwert gem. uint16_t macht, wahrscheinlich ist
> avrdude darauf nicht eingerichtet.
Du wirst dort auch nix finden.

Aus dem einfachen Grund: AVRDUDE ist das sowas von egal, was im EEPROM 
steht. AVRDUDE kennt weder uint16_t, noch sonst irgendeinen Typ, 
abgesehen vom 'Byte'. Was du mit deinen Bytes anstellst, ist dir 
überlassen. Oder deinem Assembler oder deinem C-Compiler oder sonstwem.
Entsprechend bekommst du auch höchstens 255 heraus, mehr geht mit einem 
Byte halt nicht. Alles darüber setzt sich aus mehreren Bytes zusammen.

> Vielleicht gibt etwas Fertiges, das das Auslesen und in uint16_t-Format
> bringen am Stück erledigen kann?
Was willst du denn damit?

Autor: Alexander Schmeil (knut740)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven P. schrieb:
> Was willst du denn damit?

In ein Meßwertdatendarstellungsprogramm einspeisen und graphisch 
darstellen lassen.

mfg

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alexander Schmeil schrieb:
> Sven P. schrieb:
>> Was willst du denn damit?
>
> In ein Meßwertdatendarstellungsprogramm einspeisen und graphisch
> darstellen lassen.
Achso, das soll ein Protokoll sein...

In dem Fall ist uint16_t ungünstig, da abhängig von der Endianness der 
Architektur. Wenns nur AVR ist, lässt sich das aber herausfinden.

Lass dir den Inhalt des EEPROMs in Binär ausgeben und dann 
experimentiere mal mit dem *hd*-Programm (hexdump).

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.