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
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.
_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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.