Guten Tag,
ich habe bereits ein Assembler Programm mit hilfe des MPLAB X IDE 1.30
auf meinem PIC 32 zum laufen bekommen.
Da dieser Prozessor den MIPS Befehlssatz nutzt habe ich das selbe
Programm mit dem MARS 4.1 MIPS Simulator Maschinencode simuliert.
Nun bin ich auf der Suche nach diesen Maschinencode leider nicht fündig
geworden.
Ich habe einmal den Befehl
1
addi $t0, $zero, 1
ausgewählt ... dieser entspricht im Hex Format
1
20 08 00 01
(auch per Hand nachgerechnet)
leider kann ich weder in der entsprechenden *.hex Datei, noch in
irgendwelchen anderen Dateien diese Hex Folge finden.
Daher meine Frage: wo kann man sich den Maschinencode eines Assembler
Programms angucken? (Hex oder Bin)
Ich weiss die Syntax nicht genau, aber du kannst so ein marker
schreiben...
1
voidsome_function(void)
2
{
3
...
4
asmvolatile(".word 0xa5a5a5a5");// marker
5
asmvolatile("addi %t0, $zero, 1");
6
...
7
}
und dann kannst die Markierung suchen (A5 A5 A5 A5) sollte auffällig
sein
(falls den Kompiler gcc basiert ist, gibts ein objdump befehl, mit
Option -d erzeugt ein disasm Listing).
Denk dran, dass der PIC32 und die Microchip-Tools MIPS16e können und
benutzen. Ich habe keine Ahnung, ob Dein Simulator das macht, dieser
Teil ist halt optional.
fchk
und das ein hex-file kein bin-file ist könnte auch noch ein problem
bereiten.
such mal im netz nach dem tool hex2bin und lass dein file mal
konvertieren. ich vermute du findest die stelle dann sehr schnell.
Danke, die Antworten waren sehr hilfreich ...
Ich habe den Codefolge nicht gefunden, weil sie in umgekehrter
Reihenfolge in der Hex Datei stehen.
Für Testzwecke hatte ich folgendes vor.
Ich wollte ein Assembler Programm schreiben und dieses auf den Pic
brennen. Dann mit der MPLAB Funktion Device Memory in Hex Datei den
Programmspeicher auf der Festplatte speichern.
Das Programm schaltet im Wesentlichen einfach eine LED an und ist daher
sehr überschaubar.
Nun wollte ich erst ein Progrmm schreiben, was direkt zu begin an das
ende springt (mit einer verzweigung, die immer wahr ist).
Dann wollte ich per hand die Betreffende Zeile in der Hex datei ändern
(so das die Verzweigung nicht mehr ausgeführt wird).
Letztlich sollte die LED dann wieder leuchten.
Soweit komme ich aber garnicht erst.
Selbst wenn ich das Programm bei dem die LED leuchtet direkt auf den Pic
spiele und diese Datei dann in ein Hex File schreibe und dieses File
direkt wieder in den Pic schreibe, dann leuchtet die LED nicht (ich
ändere also nichts an der Hex Datei).
Woran könnte das liegen? Bzw. was mache ich falsch/habe ich vergessen?
Frank K. schrieb:> Config Words?>> fchk
Was ist das/wo knn ich das nachgucken/einstellen?
Ach übrigends ... mir ist noch aufgefallen, dass die Hex Datei die der
Coplimer erzeugt sehr viel länger ist, als die datei, die ich aus dem
Chip auslese. Die Zeilen direkt aus dem Chip sind aber vollständig (1 zu
1) in der Hex Datei vom Compiler enthalten.
Nachtrag: ich habe mir die Hex Datei nochmal genauer angeguckt.
Ich schätze mal, das hat fchk auch vermutet. In der Hexdatei aus dem
Chip wird lediglich der Programmspeicher ausgelesen, nicht aber der
Config Speicher.
Meiner Vermutung nach, wird vor dem Schreiben der gesamte Speicher
gelöscht. Und da dann nur der Programmspeicher geschrieben wird, ist der
Rest eben leer.
Wie kann ich dann entweder nur den Programm Speicher überschreiben oder
aber auch die anderen Speicher auslesen?
Ich habe auch noch rausgefunden, dass man über das Integrated
Programming Environment Beta 1.30 ein Enviroment abspeichern kann, was
auch eine *.bin Datei beinhaltet. Ewtl. wird dort mehr abgelegt!?
Versuche das mal raus zu bekommen.
Frank K. schrieb:> Thomas F. schrieb:>> Frank K. schrieb:>>> Config Words?>>>> Was ist das/wo knn ich das nachgucken/einstellen?>> Datenblatt
und
MPLAB -> Configure -> Configuration Bits
bzw.
MPLAB X -> Window -> PIC Memory Views -> Configuration Bits
@Thomas F.
Hast Du eine C-Phobie?
Ist heilbar. PIC32 in Assembler macht doch nicht wirklich Sinn, oder?
Wenn C auf dem PIC32 zu langsam ist, such Dir doch einen schnelleren µC.
spontan schrieb:> @Thomas F.> Hast Du eine C-Phobie?>> Ist heilbar. PIC32 in Assembler macht doch nicht wirklich Sinn, oder?> Wenn C auf dem PIC32 zu langsam ist, such Dir doch einen schnelleren µC.
:D :D :D
nein ... das nicht ... ich habe eher sowas wie eine Assembler-Phobie^^
Meines Erachtens nach macht Assembler nur Sinn, wenn es um extremst
zeitkritische Dinge geht ... sonst sind die Vorteile einer Hochsprache
eben nicht von der Hand zu weisen ...
Allerdings möchte ich dennoch Assembler verwenden - genauer der 32 Bit
MIPS Befehlssatz und darum eben auch genau diesen Chip.
Arc Net schrieb:> Frank K. schrieb:>> Thomas F. schrieb:>>> Frank K. schrieb:>>>> Config Words?>>>>>> Was ist das/wo knn ich das nachgucken/einstellen?>>>> Datenblatt>> und> MPLAB -> Configure -> Configuration Bits> bzw.> MPLAB X -> Window -> PIC Memory Views -> Configuration Bits
Vielen Dank für die Antwort! Habe ich gefunden.
Gibt es auch die Möglichkeit entweder nur den Config Memory direkt aus
dem Chip auszulesen und ihn in eine Hexdatei zu speichern?
Oder noch besser direkt den gesamten Speicher in eine Hexdatei zu
schreiben?
(Angemerkt sei, dass ich zum Programmieren auf das PicKit3 und das Uno32
Board festgelegt bin)
Oder ich frage mal noch anders:
Wie bekomme ich ein Programm auf dem Chip zum laufen, wenn ich nur der
Progrmmspeicher habe? Es ist ja auch so, dass mir der Boot Speicher
fehlt.
Warum kann man mit dem Integrated Programming Environment Beta 1.30 denn
nicht den gesamten speicher abspeichern?!?
Frank K. schrieb:> Weil das, was Du willst, nicht vorgesehen ist. Normale Entwickler machen> sowas nicht.
Ich kann ihn mir angucken und theoretisch abtippen, aber nicht
abspeichern?
Der vollständigkeits halber:
Auch wenn "normale Programmierer" sowas wohl nicht machen, habe ich es
dennoch aus Verständnisgründen machen wollen und nun letztlich auch
geschafft.
Das Problem war weniger der Config Speicher. Der fehlende Boot Speicher
hat probleme gemacht, was ja auch logisch ist, wenn der fehlt.
Von der Website
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en538340&redirects=pickit3
Kann man sich das PICkit 3 Scripting Tool v3.00 BETA downloaden. Im
gegensatz zum Integrated Programming Environment Beta 1.30 (welches beim
MPLAB X dabei ist), kann man hier den Speicher auslesen, abspeichern und
eben auch manipulieren, indem man Datenwörter ändert und alles zurück in
den Chip schreibt. Perfekt übrigends auch zum kopieren von Chips.
In jedem Fall vielen Dank für die zahlreichen Denkanstöße!