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


von Alexander S. (knut740)


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:
1
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,
2
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,
3
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,
4
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,
5
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,
6
....
7
0,180,0,181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,190,0,
8
191,0,192,0,193,0,194,0,195,0,196,0,197,0,198,0,199,0,255,255,255,
9
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:
1
uint16_t adr[200] EEMEM;
2
3
int main(void)  
4
{
5
  uint16_t myWord,i;
6
     for (i=0; i<200; i++)
7
  {
8
  myWord = i;
9
    eeprom_write_word(&adr[i], myWord); // schreiben
10
  } // Ende for
11
  return(0); 
12
}

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

von Lasse S. (cowz) Benutzerseite


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

von Justus S. (jussa)


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

von Alexander S. (knut740)


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

von Sven P. (Gast)


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?

von Alexander S. (knut740)


Lesenswert?

Sven P. schrieb:
> Was willst du denn damit?

In ein Meßwertdatendarstellungsprogramm einspeisen und graphisch 
darstellen lassen.

mfg

von Sven P. (Gast)


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

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.