Forum: Mikrocontroller und Digitale Elektronik Taugt SDCC Compiler für PIC?


von skorpionx (Gast)


Lesenswert?

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?

von .... (Gast)


Lesenswert?

ptr++ = Data[i];

von skorpionx (Gast)


Lesenswert?

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ß.

von Gerhard (Gast)


Lesenswert?

Hi

wieso nimmst du nicht den kostenlosesn C18 von Microchip ?

Gerhard

von Thomas K. (tomk)


Lesenswert?

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

von skorpionx (Gast)


Lesenswert?

> 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…

von (prx) A. K. (prx)


Lesenswert?

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.

von Master S. (snowman)


Lesenswert?

> 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.

von (prx) A. K. (prx)


Lesenswert?

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.

von Master S. (snowman)


Lesenswert?

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."

von pic (Gast)


Lesenswert?

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.

von Severino R. (severino)


Lesenswert?

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
Noch kein Account? Hier anmelden.