Forum: Mikrocontroller und Digitale Elektronik PIC32 und Maschinencode


von Thomas F. (devil13)


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)

von Ale (Gast)


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

von Frank K. (fchk)


Lesenswert?

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

von Michael H. (morph1)


Lesenswert?

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.

von Thomas F. (devil13)


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?

von Frank K. (fchk)


Lesenswert?

Config Words?

fchk

von Thomas F. (devil13)


Lesenswert?

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.

von Thomas F. (devil13)


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.

von Frank K. (fchk)


Lesenswert?

Thomas F. schrieb:
> Frank K. schrieb:
>> Config Words?
>
> Was ist das/wo knn ich das nachgucken/einstellen?

Datenblatt

fchk

von Arc N. (arc)


Lesenswert?

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

von spontan (Gast)


Lesenswert?

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

von Thomas F. (devil13)


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)

von Thomas F. (devil13)


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?!?

von Frank K. (fchk)


Lesenswert?

Weil das, was Du willst, nicht vorgesehen ist. Normale Entwickler machen 
sowas nicht.

fchk

von Thomas F. (devil13)


Lesenswert?

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?

von Thomas F. (devil13)


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!

von Dieter W. (dds5)


Lesenswert?

Danke für die Rückmeldung und den Link.

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.