Forum: Mikrocontroller und Digitale Elektronik [pic] "absolute" und "relocatable"


von Thomas M. (xt-fahrer)


Lesenswert?

Hallo, jedesmal wenn ich neues Projekt in MPLAB mache, fragt er mich, ob 
"absolute" oder "relocatable code" will. Ich nehme immer den absoluten, 
aber keine Ahnung wieso. Was sind die Unterschjiede?

Gruß
T.

von Christian Erker (Gast)


Lesenswert?

In relozierbarem Code sind alle Sprungaddressen relativ, so dass er an 
jeder beliebigen Stelle im Speicher laufen kann. Das ist wichtig, wenn 
man Binär(!)libaries baut und verwenden will. Bei reinem Quellcode der 
immer vollständig übersetzt wird, ist auch absolut möglich (und 
schneller, da die Zieladresse nicht erst berechnet werden muss).

Gruß,
Christian

von Noah (Gast)


Lesenswert?

Christian Erker schrieb:
> Bei reinem Quellcode der
> immer vollständig übersetzt wird, ist auch absolut möglich (und
> schneller, da die Zieladresse nicht erst berechnet werden muss).

Nö. Absolut ist langsamer und verbraucht mehr Speicher. Dafür kann man 
aber weiter springen.

von Lehrmann M. (ubimbo)


Lesenswert?

Noah schrieb:
> Absolut ist langsamer und verbraucht mehr Speicher. Dafür kann man
> aber weiter springen.

Warum?

von Noah (Gast)


Lesenswert?

Lehrmann Michael schrieb:
> Warum?

Hm.. Beim AVR ist das zumindest so: Da ist RJMP kürzer, da nur 1 Word, 
bei JMP brauch man 2 Word, + 1 Takt mehr (um dieses aus dem 
Programmspeicher zu laden). Beim PIC scheint es aber anders zu sein: 
anscheinend gibt es nur "goto" als absoluten Sprungbefehl. Da muss man 
für einen relativen Sprung den wert vom Program Counter nehmen, dann was 
addieren oder abziehen, und dann das Ergebnis wieder auf den Program 
Counter hauen. Das ist in der tat viel langsamer ...

Also nehme ich meine Aussage zurück. Ich war (fälschlicherweise) davon 
ausgegangen, der PIC hätte auch soetwas wie RJMP.

Noah

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.