Forum: Mikrocontroller und Digitale Elektronik PIC32 und Assembler


von Thomas F. (devil13)


Lesenswert?

Guten Abend,

ich versuche mich seit kurzem an einem Pic32mx320f128h. Dieser sitzt auf 
einem Uno32 Board und wird über das PicKit3 Programmiert.

Als Software nutze ich MPLAB X IDE v1.30 und den Compiler xc32 v1.10

Ich meine irgendwo gelesen zu haben, dass in besagten Compiler auch eine 
Assembler Programmierumgebung integriert sein soll.

Ich habe in C auch ein kleines Testprogramm hinbekommen, was die LED 4 
auf dem Uno32 Board einschaltet.
1
#include <plib.h>           /* Include to use PIC32 peripheral libraries      */
2
#include <stdint.h>         /* For uint32_t definition                        */
3
4
int32_t main(void)
5
{
6
    TRISG &= ~(1<<6);
7
    PORTG |= (1<<6);
8
}

Allerdings versuche ich schon eine längere Zeit dieses Programm in 
Assembler zu schreiben, komme jedoch überhaupt nicht klar.


Selbst wenn ich versuche ein leeres Assembler Programm auf den Chip zu 
spielen, meckert MPLAB X

1
make[2]: *** No rule to make target `build/default/production/test.o', needed by `dist/default/production/pic32_template_1.X.production.hex'.  Stop.
2
make[1]: *** [.build-conf] Error 2
3
make: *** [.build-impl] Error 2


Darum meine frage:

wie sieht die Grundstruktur eines Assembler Programms für den Chip 
Pic32MX320f128h aus? Wie das Beispiel Brogramm mit der LED?

Oder mache ich ich bereits Softwareseitig was falsch? Brauche ich doch 
einen seperaten Assembler Compiler oder muss ich bei MPLAB X irgendwas 
umstellen/aktivieren?

Würde mich sehr über Hilfe freuen, weil ich echt nicht mehr weiter 
kommen ... :(

von 123 (Gast)


Lesenswert?

Wenn du ein neues Projekt erstellst Assembler auswählen (wenn es einen 
Knopf dafür gibt). Dafür braucht man übrigens keinen Compiler (der ist 
für C) sondern einen Assembler.

von Noy (Gast)


Lesenswert?

Also beim C32 ist anscheinend asm mit bei ob das beim XC32 auch ist weiß 
ich nicht.

Vor allem ist mit asm bestimmt nur inline asm gemeint also in nem C 
Programm kurz bissel assembler.
Bei den 8bit Pics gibt es ja extra nen asm compiler bei der Compiler 
auswahl...

von Noy (Gast)


Lesenswert?

ok einen assembler...

von Thomas F. (devil13)


Lesenswert?

123 schrieb:
> Wenn du ein neues Projekt erstellst Assembler auswählen

dort gibt es nur
-Standalone Projekt
-Existing MPLAB IDE v8 Project
-Prebuild Project
-Library Project

dort habe ich Standalone genommen, dann den Chip ausgewählt, dann den 
Programmer ausgewählt und dann den XC Compiler.
Dann im Projekt auf Source Files -> Rechtsklick -> New -> Assembly 
File..
Extension: asm

Dann Build Main Projekt und ich bekomme die oben geschriebene 
Fehlermeldung.

von Thomas F. (devil13)


Lesenswert?

Noy schrieb:
> Also beim C32 ist anscheinend asm mit bei ob das beim XC32 auch ist weiß
> ich nicht.
>
> Vor allem ist mit asm bestimmt nur inline asm gemeint also in nem C
> Programm kurz bissel assembler.
> Bei den 8bit Pics gibt es ja extra nen asm compiler bei der Compiler
> auswahl...

mit welcher Software kann ich denn Assembler-Programme über den PicKit 3 
Programmer auf den Pic32 Chip programmieren?

Habe ewig im Internet gesucht ... habe aber nichts finden können. 
Einzig, dass es mal eine MPASM Umgebung gab, die ich jedoch nicht zum 
Downloaden gefunden habe.

von Noy (Gast)


Lesenswert?

Also habe gerade mal nachgeschaut ich habe nämlich damals mir diese asm 
suite heruntergeladen.

Aber:
Für die PIC32 gibts anscheinend keinen Assembler auch für die dsPIC33 
schon nicht mehr für die dsPIC30 gibts bei mir noch einen Assembler...


Von daher schätze ich mal das die PIC32 nur noch in C programmiert 
werden können mit eventuell inline asm. Aber ob das geht weiß ich nicht.

Ich benutze übrigens auch ein Pickit 3 unter anderem mit dem Uno board. 
Als IDE nehm ich MPLAB X 1.3 und den C32 nicht den XC32 der scheint noch 
nicht ganz ausgereift zu sein, laut einigen Leuten.

Wenn du PIC magst schau mal bei sprut und dangerousprototypes.com
oder im Roboternetzwerk da gibts ein paar mehr PIC nutzer. Aber hier 
wirds auch shcon besser :D

von Noy (Gast)


Lesenswert?

Wobei jetzt gerade hab ich mal gegoogled und hmm vll gehts doch. 
Anscheinend gehen die MIPS befehle. Aber womit dann assemblen weiß ich 
auch net.

von Thomas F. (devil13)


Angehängte Dateien:

Lesenswert?

Noy schrieb:
> Wobei jetzt gerade hab ich mal gegoogled und hmm vll gehts doch.
> Anscheinend gehen die MIPS befehle. Aber womit dann assemblen weiß ich
> auch net.

ja genau!
Hänge mal das Datenblatt von dem Chip hier mit ran.
Auf Seite 49 ist eine Auflistung aller MIPS Befehle.

Nur eben genau mein Problem ... mit MPLAB X scheint es nicht zu gehen 
und eine alternative habe ich nicht finden können.

Das Problem ist nur, dass ich das in Assembler brauche. Und mir C nicht 
wieter hilft.

Also über einen Tipp, welche Software das kann, wäre ich sehr dankbar!

von Jürgen Landser (Gast)


Lesenswert?

Noy schrieb:
> Von daher schätze ich mal das die PIC32 nur noch in C programmiert
> werden können mit eventuell inline asm. Aber ob das geht weiß ich nicht.

Das kann man schon durch extrem einfaches nachdenken ausschließen:

Hochsprache -> ASM -> *.hex

Das war schon immer so und wird auch so bleiben. Gehört zu den 
grundlegendsten Grundlagen.

von Arc N. (arc)


Lesenswert?

Der Assembler ist sowohl bei den neueren XC-Compilern, als auch bei den 
alten dabei (xc32-as bzw. pic32-as).
Allerdings ist die Dateiendung .s bzw. .S (wenn vorher der 
C-Präprozessor laufen soll)

http://ww1.microchip.com/downloads/en/DeviceDoc/51833A.pdf

von PIC32 (Gast)


Lesenswert?

GCC bzw. GNU Binutils für MIPS existiert.

von Thomas F. (devil13)


Lesenswert?

Arc Net schrieb:
> Allerdings ist die Dateiendung .s bzw. .S (wenn vorher der
> C-Präprozessor laufen soll)

Genial! Das hat mein Problem gelöst.

Verwende ich die *.s Endung, meckert die Software nicht mehr, ich kann 
das Programm problemlos programmieren :)

In meinem Beispiel hat der folgende Code die gleiche LED eingeschalten, 
wie der C Code oben.
1
.global main
2
3
main:
4
5
    addi  $t0, $zero, 1
6
    sll $t0, $t0, 6
7
    
8
    la  $t1, PORTG
9
    lw  $t2, 0($t1)
10
    or  $t2, $t2, $t0
11
    sw $t2, 0($t1)
12
13
14
    nor $t0, $t0, $zero
15
16
    la  $t1, TRISG
17
    lw  $t2, 0($t1)
18
    and  $t2, $t2, $t0
19
    sw $t2, 0($t1)
20
21
endless:
22
j endless



... wäre ich nie drauf gekommen, dass die Dateiendung *.asm falsch wäre.
Vielen Dank, auch für die PDF!

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.