mikrocontroller.net

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


Autor: skorpionx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: .... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ptr++ = Data[i];

Autor: skorpionx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß.

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

wieso nimmst du nicht den kostenlosesn C18 von Microchip ?

Gerhard

Autor: Thomas K. (tomk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: skorpionx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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…

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht 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."

Autor: pic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
pic wrote:
> C18 ist ein GCC

Bist Du ganz sicher (Quellen, Links)? Meinst Du nicht den C30?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.