Tool: AVR-HexViewer

Dirk

Administrator
Teammitglied
28. Jan. 2007
4.328
166
63
Mittelhessen, Giessen
Sprachen
  1. ANSI C
  2. C++
  3. C#
  4. Java
  5. Kotlin
  6. Pascal
  7. Assembler
  8. PHP
Wer gerne einmal genauer in den Flash-Speicher seines AVR-Mikrocontrollers "schauen" möchte, um zu sehen, wie Applikationsprogramm, Bootloader und Daten im Flashspeicher abgelegt sind, wird sich vielleicht über unser neues Tool freuen.

AVR-HexViewer

Systemvoraussetzung: Windows2000/XP/Vista/7

Installation: Die Installation erfolgt einfach durch Ausführung des Setup-Programmes.

Beschreibung:

Über den Menüpunkt Datei/Öffnen... läßt sich ein Hex-File auswählen, welches, wie unten gezeigt, dargestellt wird.

Möchte man sich den Speicherinhalt einer bestimmten Adresse anschauen, kann man in einem Popup-Dialog die gewünschte Adresse in dezimaler oder hexadezimaler Form eingeben. Den Dialog öffnet man einfach durch Drücken der rechten Maustaste, wenn sich die Maus über der HexView-Ansicht befindet.

Wenn man sich die Speicherbelegung der Flashpages im Mikrocontroller anschauen möchte, wählt man den gewünschten Mikrocontroller aus. Die Flashpages werden grafisch dargestellt. Bewegt man die Maus über ein Flashpage-Kästchen, werden Adresse und prozentuelle Speicherbelegung angezeigt. Ein Klick mit der rechten Maustaste über einem Kästchen öffnet wieder den Dialog zum Sprung zu einer Adresse, wobei diesmal die Startadresse der Flashpage im Dialog ausgefüllt ist.

Die Speicherbelegung wird durch zwei "Füllstandsanzeigen" dargestellt, Pages benutzt und Flash-Speicher benutzt.
Eine Page gilt hierbei als benutzt, wenn mindestens ein Byte durch das Hex-File adressiert wird. Die Anzeige Flash-Speicher benutzt stellt die tatsächliche Ausnutzung des Speichers dar.

Die Anzeige der Pages läßt sich auch rechts neben der HexView-Anzeige darstellen, auch die Größe der Page-Kästchen läßt sich anpassen. Hierfür einfach den Menüpunkt Optionen wählen.



AVR-HexViewer.jpg



Aktuelle Programmversion: 2.0.1

Download AVR-HexViewer201.zip (1,47MB)

Für Kritik, Anregungen und allgemein Feedback, könnt ihr ja diesen Thread nutzten.
 
  • Like
Reaktionen: timomenges
Hi Dirk,

eine Version für Windows 2000 (aus bestimmten Gründen gibt's bei mir kein neues Windows mehr) oder vielleicht auch für Linux (Ubuntu) wäre top. Möglich???


Grüsse,

Michael
 
Hallo Michael,

ups sorry. Das Programm läuft auch auf Windows2000, zumindest sollte es das, ich kann es leider nicht testen, da ich kein Windows2000 mehr habe. Wenn du es installieren solltest, könntest du ja einmal eine Rückmeldung geben. Für Linux habe ich leider keine Version.

Ich ergänze dann mal das Betriebssystem im oberen Beitrag.

Gruß,
Dirk
 
Hi Dirk,

prima, das reicht mir dann. Probier ich nacher aus.


Grüsse,

Michael
 
Hi Dirk,

funktioniert:)


Grüsse und eine schöne Woche,

Michael
 
Hi Dirk,

hab mir das mal angesehen - bei den beiden Frequenzteilerprogrammen für Thomas sieht es recht unspektakulär aus. Alles bis auf die ersten paar Kästchen ist leer.
schwarz = voll
weiß = leer
gelb = weniger als 10% belegt
grau = sonst?

gelb hab ich bei der Tiny2313-Version, klar, die ersten Interruptvektoren werden übersprungen.
Wie wertet Ihr das eigentlich aus? 0xFF gilt in jedem Byte als frei? Oder betrachtet Ihr das immer wortweise? Generell kann ja in vielen Opcodes ein 0xFF auftauchen. (Ok, R31 mit R31 zu verrechnen ist jetzt nicht sooo häufig dran, aber wenn man zB 0b????1111 nach R31 laden läßt, ergibt sich 1110 ???? 1111 1111 als Opcode, also 0x E? FF.
 
Hallo LotadaC,

ich müsste mal nachschauen (es ist ja schon ein paar Jahre her und es basiert auf einem Tool von mir noch ein paar Jahre älter).

Angezeigt wird die Belegung je Page, die Pagegröße ist davon abhängig, welcher Mikrocontroller verwendet wird.

Soweit ich mich noch erinnere, hatte ich es so gelöst ...
Wenn das Hexfile ein Byte (oder Word) in der Page adressiert, gilt es als belegt. Auch wenn der Inhalt ein 0xFF ist, also unabhängig vom Inhalt/Wert des Bytes.
(Es hat also nicht damit zu tun, dass zufällig beim AVR Flash ein Byte mit 0xFF eigentlich nicht mehr gelöscht werden muss).

Habe ich zum Beispiel eine Tabelle mit nur 0xFF in meinem Programm, was eine Page füllt, gilt die Page als 100% belegt.

Dirk :ciao:
 
Ah ok.
Im HexFile steht ja (vereinfacht) "schreibe ab Adresse xyz folgende Bytes/Words. Da dürfen dann auch Lücken verbleiben.
(Quasi wenn man mit .org Bereiche freiläßt, wie bei mir geschehen)
Hmm...
Wenn man einen Controller auslesen läßt, wird bei den mir bekannten Programmen ein lückenloses Abbild erzeugt, müßte demnach dann alles voll erscheinen...
hmm...
Das Tiny2313-Programm erzeugt folgendes Hexfile:
Code:
:020000020000FC
:020000001BC023
:100020002EB9B59AB59907C0B69A115021F415E0CA
:10003000B09AB099B19A189504E201BB0FE707BBDB
:1000400008E40DB92BE42EB904E00CBF09E006BFAB
:1000500003E600BF00E009BD01E308BD03E60ABDF9
:1000600003E60FBD09E10EBD09E003BF0CE00AB9CC
:0E00700006E403B900E009B915E07894FFCF6B
:00000001FF
führt zu:
AVR_HEX_1.png
Das Studio liest folgendes aus dem AVR zurück:
Code:
:100000001BC0FFFFFFFFFFFFFFFFFFFFFFFFFFFF23
:10001000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
:100020002EB9B59AB59907C0B69A115021F415E0CA
:10003000B09AB099B19A189504E201BB0FE707BBDB
:1000400008E40DB92BE42EB904E00CBF09E006BFAB
:1000500003E600BF00E009BD01E308BD03E60ABDF9
:1000600003E60FBD09E10EBD09E003BF0CE00AB9CC
:1000700006E403B900E009B915E07894FFCFFFFF6B
:10008000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:10009000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
:1000A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:1000B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
:1000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:1000D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
:1000E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:1000F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10
:10010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
:10011000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF
:10012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF
:10013000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF
:10014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF
:10015000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF
:10016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F
:10017000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F
:10018000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F
:10019000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F
:1001A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F
:1001B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F
:1001C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F
:1001D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F
:1001E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F
:1001F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F
:10020000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE
:10021000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE
:10022000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE
:10023000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE
:10024000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE
:10025000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE
:10026000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E
:10027000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E
:10028000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E
:10029000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E
:1002A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E
:1002B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E
:1002C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E
:1002D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E
:1002E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E
:1002F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E
:10030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD
:10031000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED
:10032000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD
:10033000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD
:10034000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD
:10035000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD
:10036000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D
:10037000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D
:10038000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D
:10039000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D
:1003A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D
:1003B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D
:1003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D
:1003D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D
:1003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D
:1003F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D
:10040000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC
:10041000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC
:10042000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC
:10043000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC
:10044000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC
:10045000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC
:10046000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C
:10047000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C
:10048000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C
:10049000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C
:1004A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C
:1004B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C
:1004C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C
:1004D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C
:1004E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C
:1004F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C
:10050000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB
:10051000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB
:10052000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDB
:10053000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB
:10054000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBB
:10055000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB
:10056000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B
:10057000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B
:10058000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B
:10059000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B
:1005A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B
:1005B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B
:1005C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B
:1005D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B
:1005E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B
:1005F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B
:10060000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA
:10061000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA
:10062000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDA
:10063000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA
:10064000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBA
:10065000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA
:10066000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A
:10067000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A
:10068000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A
:10069000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A
:1006A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A
:1006B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A
:1006C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A
:1006D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A
:1006E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A
:1006F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A
:10070000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9
:10071000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9
:10072000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9
:10073000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9
:10074000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9
:10075000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9
:10076000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99
:10077000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89
:10078000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79
:10079000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69
:1007A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59
:1007B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49
:1007C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF39
:1007D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29
:1007E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF19
:1007F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09
:00000001FF
Dein Tool macht daraus:
AVR_HEX_2.png
Die zurückgelesenen FFs werden als leer erkannt, allerdings oben nicht mehr grau hinterlegt...
???
 
Ist ja eigentlich nicht weiter wichtig. Interessiert mich nur. Mach Dir mal keinen Streß...;)

Schönes Wochenende,
LotadaC
:ciao:
 
:D Nein, Stress mache ich mir nicht. Ich habe nur super wenig Zeit.

Wenigstens gibt es jetzt mal Feedback, nach 7 Jahren :)

Da es allgemein bei den Tools, kein Feedback/Interesse gibt, hatte ich keine mehr entwickelt und ins Forum gestellt oder irgendwas weiter entwickelt.

Ebenfalls noch ein schönes Wochenende!

Dirk :ciao:
 
Das Tool ist echt gelungen. Man kann prima den Speicher und die Adressen lokalisieren. Würde ich vor jedem anderen Tool vorziehen!
 
  • Like
Reaktionen: maik
Hi,

Dein Tool macht daraus:
Anhang anzeigen 7657
Die zurückgelesenen FFs werden als leer erkannt, allerdings oben nicht mehr grau hinterlegt...
???

um wirklich sicher zu sein das der Bereich leer ist, müßte man die Befehle interpretieren. Bei Assembler können auch Bereiche mit FFs leer sein die nicht als solche erkannt werden oder andersrum (nicht leer aber mit FFs gefüllt).

Da kann man nur sicher sein wenn man die selber assemblierte HEX-Datei hat.

Gruß
Dino
 
Eben.
Die aus dem Assembler-Programm erzeugte HEX-Datei läßt die Lücken (.org-Direktive) bestehen, es wird genau da Code erzeugt, wo das Programm ihn vorsieht.
Beim Auslesen wird hingegen eine HEX erzeugt, die ein komplettes Abbild des Speichers darstellt, Logischerweise auch mit allen 0xFFs - seien die nun "leer", oder absichtlich geschrieben.
Dirks Tool "erkennt" aber (scheinbar) in beiden(!) Fällen, daß gut 95% des Flash "frei" sind, mMn kann diese Schlußfolgerung nur aus den FFs selbst kommen.
In der Hex-Darstellung sind alle Pages, die durch die Hex-Datei nicht getroffen werden grau hinterlegt - das fließt aber nicht in die prozentuale "Benutzung" unten mit ein.

Wie sähe es bei folgender Konstruktion aus?
Ich hänge an mein Programm viiiele 0xFFFFs an (mit .db im Codesegment). Dann ist zu erwarten, daß die 0xFFs auch in der HEX.Datei auftauchen. Diese 0xFFs dürften in der Hex-Darstellung dann nicht mehr grau hinterlegt sein. Eigentlich wäre der Flash damit voll.
Was wird dann bei der "Benutzung" unten zu sehen sein?
Eigentlich wären 100% zu erwarten - ich tippe trotzdem auf knapp 5%. Spatestens beim Zurücklesen gibt es ja dann keinen Unterschied mehr zum Bild oben...
 
Das ist doch jetzt aber meckern auf höchstem Niveau ;)
Man könnte auch 5TB auf einen ATtiny packen wenn die Speicherzellen mehrfach und / oder überlappend angelegt sind. Das kann man nahezu unmöglich alles abfangen. Erstrecht nicht wenn Team Bitschubse mit extravaganten aber gut funktionierenden Ideen zuschlägt :)

Es könnte auch der komplette RAM frei sein (außer Stack), aber trotzdem genutzt werden, z. B. für Zufallszahlen. Der Status ist ja nicht definiert. Ok, das Tool ist für den Flash, aber nur als Beispiel.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)