Forum: Mikrocontroller und Digitale Elektronik PIC32 - XC32 - Assembler


von Michael (Gast)


Lesenswert?

Hallo,
ich setzte mich gerade mit dem PIC32MX220F032B auseinander.
Ich habe in C ein kleines LED Blink Programm geschrieben und es hat 
alles gut funktioniert.

Vor dem PIC32 habe ich mit dem PIC16F887, den ich noch in Assembler 
programmiert habe, gearbeitet.
Jetzt habe ich keine richtige Kontrolle mehr über die "Zeit" weil ich 
eben in C programmiere
In Assembler wusste ich ja noch das ein Befehl (außer ein paar Ausnahmen 
wie GOTO) nur einen Takt benötigen wodurch ich exakte Zeiten bestimmen 
konnte, was oft sehr nützlich sein konnte.
Bin ich jetzt komplett auf TIMER angewiesen?

Ich wollte jetzt nur einmal zum testen eine LED Blink Programm in 
Assembler schreiben.
Jedoch muss ich sagen, dass man kein einziges Tutorial findet was sich 
mit MIPS Assembler in Verbindung mit dem PIC32 auseinander setzt.
Für MIPS Assembler alleine findet man ne ganze Menge aber eben nicht in 
Verbindung mit dem PIC.
Den grundlegenden aufbau von dem MIPS Assembler verstehe ich langsam, 
jedoch habe ich keine Ahnung wie ich das an dem PIC32 anwenden kann.
Z.B. wie spreche ich eine PORTx oder LATx "Register" an, handelt es sich 
jetzt überhaupt noch um Register oder um Speicherbereiche im RAM ?

Es fällt mir schwer mich weiter in den PIC32 einzuarbeiten, wenn ich 
kein LED Blink Programm in Assembler als Grundlage habe, dass ich 
langsam modifizieren kann um zu experimentieren.

Vielleicht kennt jemand die eine oder andere gute Seite/Buch oder kann 
mir dieses kleine Programm als Grundlage schreiben?

von Heiko J. (heiko_j)


Lesenswert?

Michael schrieb:

> Jetzt habe ich keine richtige Kontrolle mehr über die "Zeit" weil ich
> eben in C programmiere
> In Assembler wusste ich ja noch das ein Befehl (außer ein paar Ausnahmen
> wie GOTO) nur einen Takt benötigen wodurch ich exakte Zeiten bestimmen
> konnte, was oft sehr nützlich sein konnte.

Das kannst Du auf nem MIPS auch in Assembler nicht besser. Die branch 
prediction macht das praktisch nahezu unmöglich.

> Bin ich jetzt komplett auf TIMER angewiesen?

Timer sind der bessere Weg.

> Ich wollte jetzt nur einmal zum testen eine LED Blink Programm in
> Assembler schreiben.

Warum ?

> Den grundlegenden aufbau von dem MIPS Assembler verstehe ich langsam,
> jedoch habe ich keine Ahnung wie ich das an dem PIC32 anwenden kann.
> Z.B. wie spreche ich eine PORTx oder LATx "Register" an, handelt es sich
> jetzt überhaupt noch um Register oder um Speicherbereiche im RAM ?
>
> Es fällt mir schwer mich weiter in den PIC32 einzuarbeiten, wenn ich
> kein LED Blink Programm in Assembler als Grundlage habe, dass ich
> langsam modifizieren kann um zu experimentieren.

Lass Dir von deinem bereits in C geschriebenen Beispiel vom Compiler 
halt mit "-S" in Assembler ausgeben.

von (prx) A. K. (prx)


Lesenswert?

Michael schrieb:
> In Assembler wusste ich ja noch das ein Befehl (außer ein paar Ausnahmen
> wie GOTO) nur einen Takt benötigen wodurch ich exakte Zeiten bestimmen
> konnte, was oft sehr nützlich sein konnte.

Ab einer gewissen Komplexität der Prozessoren ist eine exakte 
Zeitkalkulation von Befehlsfolgen mindestens schwierig bis praktisch 
sinnlos. Dann empfiehlt es sich eine Suche nach exakten Taktzählern, wie 
Timern, Systicks, TSCs etc.

Bis zu einem gewissen Grad kann man noch mit selbst kalibrierendem Code 
dagegen halten, d.h. mit Schleifen, deren Verhalten anfangs mal gemessen 
wird. Wenn dann allerdings nichtdeterministische Methoden wie Caches und 
global arbeitende Sprungvorhersagen dazu kommen, dann ist auch das nur 
noch begrenzt einsetzbar.

: Bearbeitet durch User
von anon (Gast)


Lesenswert?

Michael schrieb:
> Den grundlegenden aufbau von dem MIPS Assembler verstehe ich langsam,
> jedoch habe ich keine Ahnung wie ich das an dem PIC32 anwenden kann.
> Z.B. wie spreche ich eine PORTx oder LATx "Register" an, handelt es sich
> jetzt überhaupt noch um Register oder um Speicherbereiche im RAM ?

Ja es sind Register nur befinden sie sich nicht "in" der CPU sie sind 
Memory-mapped.

Lies das XC32 Handbuch dort gibt es einige abschnitte über assembler, 
binde deine asm Funktionen über eine .S Datei ein.
(das große S ist entscheidend)

Und ja Cache und prefetch machen das genaue Zeitverhalten schwer 
vorhersagbar.
Flash wait zyklen usw. sind auch noch zu bedenken.

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.