PIC32 und Maschinencode

OP #2798311
Lesenswert?

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)
Gast #2798342
Lesenswert?

Ich weiss die Syntax nicht genau, aber du kannst so ein marker 
schreiben...
1
void some_function( void )
2
{
3
    ...
4
    asm volatile (".word 0xa5a5a5a5"); // marker
5
    asm volatile ("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).
OP #2798822
Lesenswert?

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?
OP #2799055
Lesenswert?

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.
OP #2800311
Lesenswert?

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)
OP #2800367
Lesenswert?

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?!?
OP #2802834
Lesenswert?

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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren