Forum: Mikrocontroller und Digitale Elektronik dsPIC 8 Bit kompatibel programmieren


von Horst (Gast)


Lesenswert?

Hallo,

ich möchte eine Software auf einem dsPIC entwickeln, die später auch auf 
einem 8 Bit PIC läuft. Ich programmieren im MPLABX und möchte den C30 
Compiler benutzen. Ist es möglich, das irgendwie einzustellen, dass der 
Code 8 Bit kompatibel ist? Ich möchte also so tun, als wäre mein dsPIC 
in 8 Biter. An der Frage seht Ihr wahrscheinlich schon, dass ich noch 
Anfänger bin, also seid gnädig mit mir ;)

Viele Grüße
Horst

von Edson (Gast)


Lesenswert?

Das geht nur wenn du Assembler von Hand schreibst und dabei alle 
Migrationsregeln beachtest. Dann werden immer noch jede Menge 
Code-Schnippsel umgeschrieben werden müssen wenn das irgendwann auf 
einem PIC16 oder PIC18 laufen soll, weil die Peripherie anders aufgebaut 
ist, an anderen Adressen liegt oder schlicht auf dem 8-Bitter nicht 
vorhanden ist.
Um ehrlich zu sein: dein Vorhaben hat wenig bis keine Aussicht auf 
Erfolg, vor allem wenn du Anfänger bist.

von Edson (Gast)


Lesenswert?

_Aber_: Du kannst versuchen, dein C-Programm so zu gestalten, dass er 
auch mit dem C18 oder den Hi-Tech Compilern übersetzt werden kann. 
Laufzeitverhalten und Platzbedarf auf dem dsPIC sind natürlich anders 
als auf einem kleinen PIC16, wenn du das berücksichtigst gehts 
theoretisch. Es ist aber immer noch nicht besonders sinnvoll oder 
erfolgversprechend.

von (prx) A. K. (prx)


Lesenswert?

Horst schrieb:
> Ist es möglich, das irgendwie einzustellen, dass der
> Code 8 Bit kompatibel ist?

Wenn du darunter die Möglichkeit verstehst, den Code auch für 8-Bit 
Prozessoren übersetzen zu können: teilweise. Binärkompatibel geht aber 
selbstverständlich nicht.

Da die Sprache C auch auf einem 8-Bit Prozessor davon ausgeht, dass 
int/unsigned 16 Bits haben, ist der Unterschied in der Verarbeitung von 
Daten sehr überschaubar. Voraussetzung ist, dass der Compiler für den 
8-Bit Prozessor das auch so sieht, statt sich der Effizienz halber für 
8-Bit int/unsigned oder für vom Standard abweichende 
Konvertierungsregeln zu entscheiden. Das sollte sich beim Compiler aber 
passend einstellen lassen. Zudem kann man das auch im eigenen Programm 
berücksichtigen.

Unterschiede in den I/O-Modulen sind hingegen recht wahrscheinlich und 
hier kommt mal selten darum herum, eine gewisse Abhängigkeit von der 
Controller-Familie ins Programm einzubauen. Auch wenn die Module bei den 
diversen PIC Familien recht ähnlich sind. Insbesondere das 
Interrupt-System unterscheidet sich erheblich.

von Bronco (Gast)


Lesenswert?

Es ist durchaus nicht selten, daß ein SW-Projekt so gestaltet wird, daß 
es auf verschiedenen Plattformen laufen kann.
Vorraussetzung hierfür ist es, daß alle Target-spezifischen Dinge (wie 
Register, Interrupts u.ä.) in einer HAL (Hardware Abstraction Layer) 
gekapselt werden, und natürlich muß man für jedes Target eine solche HAL 
entwickeln.
Außerdem muß man alle Eigenheiten (wie spezifische Schlüsselwörter) der 
verwendeten C-Compiler berücksichtigen.
Du mußt z.B. prüfen ob den 8Bit-Compiler eine Syntax wie
1
void __attribute__((__interrupt__, __auto_psv__)) _OscillatorFail(void)
versteht.

von heinzhorst (Gast)


Lesenswert?

Auf den unteren Ebenen macht das überhaupt keinen Sinn, was du vorhast. 
Der dsPic hat völlig andere (weit leistungsfähigere) Peripherie als die 
PIC16 bzw. PIC18. Wenn du das dann portieren willst, dann kannst du auch 
gleich alles neu schreiben. Zwischen den anderen Controllerfamilien von 
Microchip sieht das wieder anders aus. Bei dsPIC, PIC24 und PIC32 ist 
die Peripherie weitgehend identisch. Da kann man den Code relativ leicht 
hin- und her-portieren.

von Frank K. (fchk)


Lesenswert?

Schau Dir die Microchip Application Libraries an. Die sind für 
PIC18/24/32 ausgelegt. Der Trick besteht in den #defines der 
Headerdateien und der Trennung in architekturneutrale und 
architekturabhängige Teile.

fchk

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.