Ich bin gerade bei meinen ersten Versuchen mit PIC. Mein Ziel ist eine Applikation mit CAN-Bus. SDCC Compiler war für mich die erste Wahl… So habe ich die ersten praktischen Erfahrungen gesammelt. Ausgangsbasis war: „PIC18C CAN Routines in „’C’ von Microchip (AN738)“. Im Beispiel musste ich bestimmte Änderungen unternehmen. SDCC bearbeitet nicht richtig Pointer auf Systemvariablen. So etwas führte zu nichts (außer Fehler): // Populate data values. ptr = (BYTE*)&RXB0D0; for ( i = 0; i < DataLen; i++ ) ptr[i] = Data[i]; und musste durch direkte Zuweisungen ersetzen: RXB0D0 = Data[0]; RXB0D1 = Data[1]; RXB0D2 = Data[2]; RXB0D3 = Data[3]; RXB0D4 = Data[4]; RXB0D5 = Data[5]; RXB0D6 = Data[6]; RXB0D7 = Data[7]; Auch die Funktion: “CANIDToRegs((BYTE*)&RXB0SIDH, id, CAN_CONFIG_STD_MSG);” musste ich durch eigene Funktion ohne Pointer ersetzen: CANIDToRegsD(id, CAN_CONFIG_STD_MSG); Jetzt läuft schon fehlerfreie Sendung. Hat schon jemand mit SDCC für PIC Erfahrungen gemacht? Wird SDCC weiter entwickelt? Wie ist der aktuelle Stand?
Das ist fehlerhaft:
> ptr++ = Data[i];
Richtig wäre:
*ptr++ = Data[i];
Aber das ändert nicht an der fehlerhaften Arbeit des SDCC...
Außerdem ist die Code Länge bei SDCC verdächtig groß.
Hi wieso nimmst du nicht den kostenlosesn C18 von Microchip ? Gerhard
Hi scorpionx, die richtige Antwort lautet wohl: jein! ;-) Zuerst mal sollte die Frage geklärt werden: welche Platform (Win, Linux) und welche Version. Bei der 2.8.0 weiß ich (weil selbst gesehen), das indizierte Anweisungen in die Hose gehen: statt INDF wird fälschlich FSR verwendet. Auch mit Zuweisungen an Strukturen gibt es Probleme. Wenn Du unter Windows arbeitest, könnte der Compiler von Microchip ev. eine Lösung sein, wie dessen Qualität ist, kann ich nicht beurteilen, da ich unter Linux arbeite und diesen nie benutzt habe. Der PIC-Port für den SDCC ist, wie auch die Homepage sagt, unvollständig und eher im Experimentalstadium. Versuch's vielleicht auch mit älteren Versionen (z.B. 2.6.0), die war scheinbar in mancher Beziehung besser. Ob der Microchip-C-Compiler auch unter Linux-Wine arbeitet? Vielleicht hat das schon jemand anderes probiert. Schönen Tag noch,Thomas
> wieso nimmst du nicht den kostenlosesn C18 von Microchip ?
Ist der C18 Compiler begrenzungslos frei? D.h., keine zeitliche
Rahmen für Benutzung oder beschränkte Funktionalität?
Es wäre schön wen der freie SDCC voll funktionsfähig wäre.
Das kommt auch irgendwann…
Der C18 kann in der freien Version die erweitere Architektur neuerer PIC18 nicht nutzen, d.h. kann nicht relativ adressieren. Das geht deutlich zu Lasten der Qualität des Codes, vor allem wenn man wie voreingestellt in einem Speichermodell arbeitet, in dem lokale Daten auf dem Stack landen.
> Der C18 kann in der freien Version die erweitere Architektur > neuerer PIC18 nicht nutzen, d.h. kann nicht relativ adressieren ähm, was heisst das? ich benutze den C18 seit jeher und bin zufrieden, bin aber nicht der ultimative crack was codeoptimierung betrifft. der C18 in der studentenversion ist zeitlich unlimitert nutzbar, und darf soweit ich weiss sogar auch gewerblich gratis gebraucht werden.
Master Snowman wrote: > ähm, was heisst das? ich benutze den C18 seit jeher und bin zufrieden, Ds heisst einfach nur, dass der kostenpflichtige C18 für neuere PIC18 besseren Code erzeugen kann als der freie. Wenn das keine Rolle spielt, da Performance weniger wichtig und genug Platz im ROM, dann kann das völlig egal sein. Die Studentenversion ist eine anderes Thema. Nicht jeder ist Student/Schüler.
ok, danke für die erklärung: ist bei mir fast immer der fall, dass geschwindigkeit 2.rangig und genügend ROM vorhanden ist. bezüglich der studenten-version: die heisst nur so ;-) "... if You downloaded the "Student Edition" of the Software from the web, You may install and use such version of the Software on an unlimited number of computers for commercial or educational use."
C18 ist ein GCC, den kannst du auch selbst Compilieren, Microchip hat das nur ein bisschen schwer gemacht, aber es gibt genug Anleitungen für die Compilation unter Linux. Irgendwie muß sie ja die GPL erfüllen. SDCC taugt bedingt. Sprich der hat horrende Bugs. Habe mal meine eigene SW damit übersetzt. Von den über 30 Fehlern konnte ich so 12 ausbessern, dann wusste ich nicht mehr weiter und habs aufgegeben. Habe aber eine SW, welche von Basic auf C übersetzt. Die funktioniert problemlos mit dem SDCC. Es wird dann halt nur ein begrenzter Sprachumfang benutzt, der Fehlerfrei ist. Also mit vorsicht zu genießen. Ein C Projekt würde ich mit dem nicht machen wollen.
pic wrote:
> C18 ist ein GCC
Bist Du ganz sicher (Quellen, Links)? Meinst Du nicht den C30?
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.