Forum: Compiler & IDEs Unterstuetzung von PICs in sdcc rausgeflogen?


von Stephan (Gast)


Lesenswert?

wenn ich kompiluiere bekomme ich nur
"libsdcc.lib: No such file or directory"

was fehlt denn nun bei sdcc, der kann doch pic oder was?

Gruss
Stephan

: Verschoben durch User
von Peter C. (peter_c49)


Lesenswert?

> der kann doch pic oder was?
kann er.
nur die libs sind ev nicht mehr dabei da teile davon non-free sind.
ich hab sdcc selbst übersetzt, und die non-free option angemacht.

$ pwd
/usr/local/share/sdcc/non-free
c-1po:/usr/local/share/sdcc/non-free$ ll
total 16
drwxr-xr-x 4 root root 4096 Jun  7  2013 ./
drwxr-xr-x 5 root root 4096 Jun  7  2013 ../
drwxr-xr-x 4 root root 4096 Jun  7  2013 include/
drwxr-xr-x 5 root root 4096 Jun  7  2013 lib/

c-1po:/usr/local/share/sdcc/non-free$ ls lib/
pic14  pic16  src


siehe zb https://bugs.launchpad.net/ubuntu/+source/sdcc/+bug/1077918

von Stephan (Gast)


Lesenswert?

Peter, danke fuer eine erste Reaktion.

  ich hab den Bug-Beschrieb deines Verweises gelesen: der Hinweis auf 
das Paket "sdcc-libraries" ist fuer mich schon mal neue Info.
  Bin nun am "falschen Rechner" und pruefe dies entspr. morgen nach.

  Herzlichen Dank!


  Ich hatte mein Problem viel detaillierter beschrieben:
  * <Beitrag "sdcc, cin2h.pl fuer PIC16f5x oder PIC16f84 - Einstiegshuerden :-/";

  Aber anscheinend muss in diesem Forum die Anfrage einen gewissen Grad 
an Schluddrigkeit aufweisen um ueberhaupt eine Reaktion zu 
provozieren...  :-)

gute Nacht
Stephan

von Stephan (Gast)


Lesenswert?

mein System sagt dass das Paket "sdcc-libraries" tatsaechlich bereits 
installiert ist.

von S. R. (svenska)


Lesenswert?

Aber da sind nur die freien Bibliotheken drin, nicht die unfreien für 
PICs. :-)

von Andreas H. (ahz)


Lesenswert?

Stephan schrieb:
> Ich hatte mein Problem viel detaillierter beschrieben:
>   * <Beitrag "sdcc, cin2h.pl fuer PIC16f5x oder PIC16f84 -
> Einstiegshuerden :-/"
>
First Post im Thread:
 Autor: Stephan (Gast)
Datum: 12.05.2014 16:00

>   Aber anscheinend muss in diesem Forum die Anfrage einen gewissen Grad
> an Schluddrigkeit aufweisen um ueberhaupt eine Reaktion zu
> provozieren...  :-)
First Post im Thread:
 Autor: Stephan (Gast)
Datum: 12.05.2014 20:22


Das sind 4:22 Stunden. Etwas ungeduldig, oder ?

Verwundert...

A.

von Stephan (Gast)


Lesenswert?

Andreas H. schrieb:
> Das sind 4:22 Stunden. Etwas ungeduldig, oder ?
> Verwundert...

  wenn ich sehe wie schnell und wie viel auf andere, extrem mager 
beschrieben Anfragen eingegangen wird, bin ich auch verwundert!

nix fuer ungut.


S. R. schrieb:
> Aber da sind nur die freien Bibliotheken drin, nicht die
> unfreien für PICs. :-)

  ja, weiter bitte! Ich haeng an deinen Lippen...

  schliesslich finde ich 141 *.[Sc] Dateien in ".../pic1[46]/libsdcc/" 
und 28 *.h Dateien in ".../include/pic1[46]/" Verzeichnisse:
"""
$ find /usr/share/sdcc/lib/src/ -name libsdcc
/usr/share/sdcc/lib/src/pic16/libsdcc
/usr/share/sdcc/lib/src/pic14/libsdcc
$ find /usr/share/sdcc/lib/src/pic1*/libsdcc -type f | wc -l
141
$ find /usr/share/sdcc/include/ -iname '*.h' | grep 'pic1[46]' | wc -l
28
$
"""

  ich muesste doch was mit "cinc2h.pl" machen, verstehe dessen Anleitung 
aber nicht.
  Anwendungsbeispiele von cinc2h.pl Bitte!

Stephan

von Helper (Gast)


Lesenswert?

Stephan schrieb:
> Andreas H. schrieb:
>> Das sind 4:22 Stunden. Etwas ungeduldig, oder ?
>> Verwundert...
>
>   wenn ich sehe wie schnell und wie viel auf andere, extrem mager
> beschrieben Anfragen eingegangen wird, bin ich auch verwundert!
>
> nix fuer ungut.

Durch Forum zuspamen machst du es auch nicht besser. Kann evt auch daran 
liegen, dass nunmal weniger Leute eine Antwort auf deine Frage bereit 
haben, als auf eine Frage wie man den Vorwidersand einer LED berechnet.

Beim Problem selbst kann ich leider nicht helfen.

von greg (Gast)


Lesenswert?

Kann der SDCC eigentlich wirklich PIC, oder tut der nur so? Die 
PIC-Unterstützung war ja lange Zeit sehr schlecht.

Ich habe den SDCC etwas intensiver mit MCS-51 genutzt, und so richtig 
begeistert war ich da nicht. Man muss schon wissen, was für Schwächen 
der Compiler hat, und dementsprechend Code schreiben, mit dem der gut 
klarkommt. Und MCS-51 gehört ja (angeblich) zu den am Besten 
unterstützten Architekturen beim SDCC.

von Andreas H. (ahz)


Lesenswert?

Stephan schrieb:
> Andreas H. schrieb:
>> Das sind 4:22 Stunden. Etwas ungeduldig, oder ?
>> Verwundert...
>
>   wenn ich sehe wie schnell und wie viel auf andere, extrem mager
> beschrieben Anfragen eingegangen wird, bin ich auch verwundert!

Naja, meist haben die Leutz dann aber auch schon selber was probiert,
z.B. das, was im sdccman.pdf, Seite 68 (für Version 3.3) steht (aka "Wie 
sieht ein pic makefile für den SDCC aus, incl. compile & link").

Andere fragen sich vermutlich was an

" cinc2h.pl (common-inc2h.pl)

  This program parse the gpasm header (p1xxx.inc) files and creates
  from them the SDCC header and device library files. In addition it
  needs the gpprocessor.c file also. These is included in the source
  package of gputils.
"

unklar ist. Spätestens bei den nächsten 100 Zeilen Comment sollte ja 
klar werden, dass es ein Tool ist, das aus den Microchip .inc files die 
SFRs und I/O infos rauszieht.

Und extra für die "mager Informierten": Hintergrund ist, dass die 
original .inc Files von Microchip nicht GPL konform sind und man sie 
darum nicht problemlos weitergeben darf.

A.

von Stephan (Gast)


Lesenswert?

Andreas, danke fuer's reinkniehen in mein Problem.

Andreas H. schrieb:
> Naja, meist haben die Leutz dann aber auch schon selber was probiert,
> z.B. das, was im sdccman.pdf, Seite 68 (für Version 3.3) steht (aka "Wie
> sieht ein pic makefile für den SDCC aus, incl. compile & link").

  also, unter <Beitrag "sdcc, cin2h.pl fuer PIC16f5x oder PIC16f84 - Einstiegshuerden :-/"; habe ich 
dokumentiert was ich "schon selber was probiert" habe.

  In diversen aufzufindenden Tutorials wird mit einem Banalstbeispiel 
"test.c" (praktisch leere main() Funktion) erstmal verifiziert dass sdcc 
sich uebrhaupt aufrufen laesst - dies tut bei mir.
  Als 2tes ein Banalstbeispiel "test_include.c" (irgendein #include + 
praktisch leere main()) um zu verifizieren dass die libs sitzen und 
erreichbar sind.

  Hierzu braucht es wohl kein makefile oder? Zumindest lese ich in den 
Tutorials nix davon...

> Andere fragen sich vermutlich was an
>
> " cinc2h.pl (common-inc2h.pl)
>
>   This program parse the gpasm header (p1xxx.inc) files and creates
>   from them the SDCC header and device library files. In addition it
>   needs the gpprocessor.c file also. These is included in the source
>   package of gputils.
> "
>
> unklar ist. Spätestens bei den nächsten 100 Zeilen Comment sollte ja
> klar werden, dass es ein Tool ist, das aus den Microchip .inc files die
> SFRs und I/O infos rauszieht.

  Dies habe ich gesehen, gelesenn und verstanden. Es bleibt meine Frage: 
muss ich dies einsetzen, um fuer ein PICmicro der als unterstuetz 
gelistet ist, sdcc benutzen zu koennen?

> Und extra für die "mager Informierten": Hintergrund ist, dass die
> original .inc Files von Microchip nicht GPL konform sind und man sie
> darum nicht problemlos weitergeben darf.

  Dies hatte ich ebenfalls gesehen, gelesen und verstanden, es bleibt 
meine Frage: da ich ja sowohl .h wie .S wie .lib Dateien in pic1[46] 
Verzeichnisse finde, ist dies vollstaendig? brauche ich mehr von diesen 
Dateien? wenn ja welche? wo ist die Anleitung diese in meine host 
Installation einzupflegen?


  Mittlerweile habe ich noch festgestellt dass --verbose nicht das 
Aequivalente von -V ist, deshalb hier ein durchlauf mit -V:

"""
$ sdcc   -V -mpic14 -p16f84   test.c
+ /usr/bin/sdcpp -nostdinc -Wall -D__SDCC_PROCESSOR="16f84" 
-DSDCC_PROCESSOR="16f84" -D__SDCC_PIC16F84 -obj-ext=.o -D__SDCC=3_3_0 
-DSDCC=330 -D__SDCC_REVISION=8604 -DSDCC_REVISION=8604 -D__SDCC_pic14 
-DSDCC_pic14 -D__pic14 -D__STDC_NO_COMPLEX__ -D__STDC_NO_THREADS__ 
-D__STDC_NO_ATOMICS__ -D__STDC_NO_VLA__ -isystem 
/usr/bin/../share/sdcc/include/pic14 -isystem 
/usr/share/sdcc/include/pic14 -isystem /usr/bin/../share/sdcc/include 
-isystem /usr/share/sdcc/include  test.c
+ /usr/bin/gpasm -o test.o -c test.asm
+ /usr/bin/gplink -I/usr/bin/../share/sdcc/lib/pic14 
-I/usr/share/sdcc/lib/pic14  -I/usr/bin/../share/sdcc/lib/pic14 
-I/usr/share/sdcc/lib/pic14   -w -r -o test test.o   libsdcc.lib 
pic16f84.lib
libsdcc.lib: No such file or directory
+ /usr/bin/gplink -I/usr/bin/../share/sdcc/lib/pic14 
-I/usr/share/sdcc/lib/pic14  -I/usr/bin/../share/sdcc/lib/pic14 
-I/usr/share/sdcc/lib/pic14   -w -r -o test test.o   libsdcc.lib 
pic16f84.lib  returned errorcode 256

$

$ sdcc   -V -mpic14 -p16f84 --use-non-free   test.c
+ /usr/bin/sdcpp -nostdinc -Wall -D__SDCC_PROCESSOR="16f84" 
-DSDCC_PROCESSOR="16f84" -D__SDCC_PIC16F84 -obj-ext=.o 
-D__SDCC_USE_NON_FREE -DSDCC_USE_NON_FREE -D__SDCC=3_3_0 -DSDCC=330 
-D__SDCC_REVISION=8604 -DSDCC_REVISION=8604 -D__SDCC_pic14 -DSDCC_pic14 
-D__pic14 -D__STDC_NO_COMPLEX__ -D__STDC_NO_THREADS__ 
-D__STDC_NO_ATOMICS__ -D__STDC_NO_VLA__ -isystem 
/usr/bin/../share/sdcc/include/pic14 -isystem 
/usr/share/sdcc/include/pic14 -isystem /usr/bin/../share/sdcc/include 
-isystem /usr/share/sdcc/include -isystem /usr/bin/../share/./pic14 
-isystem /usr/share/./pic14 -isystem /usr/bin/../share/. -isystem 
/usr/share/.  test.c
+ /usr/bin/gpasm -o test.o -c test.asm
+ /usr/bin/gplink -I/usr/bin/../share/sdcc/lib/pic14 
-I/usr/share/sdcc/lib/pic14 -I/usr/bin/../share/sdcc/non-free/lib/pic14 
-I/usr/share/sdcc/non-free/lib/pic14  -I/usr/bin/../share/sdcc/lib/pic14 
-I/usr/share/sdcc/lib/pic14 -I/usr/bin/../share/sdcc/non-free/lib/pic14 
-I/usr/share/sdcc/non-free/lib/pic14   -w -r -o test test.o 
libsdcc.lib pic16f84.lib
libsdcc.lib: No such file or directory
+ /usr/bin/gplink -I/usr/bin/../share/sdcc/lib/pic14 
-I/usr/share/sdcc/lib/pic14 -I/usr/bin/../share/sdcc/non-free/lib/pic14 
-I/usr/share/sdcc/non-free/lib/pic14  -I/usr/bin/../share/sdcc/lib/pic14 
-I/usr/share/sdcc/lib/pic14 -I/usr/bin/../share/sdcc/non-free/lib/pic14 
-I/usr/share/sdcc/non-free/lib/pic14   -w -r -o test test.o 
libsdcc.lib pic16f84.lib  returned errorcode 256

$

"""

von S. R. (svenska)


Lesenswert?

greg schrieb:
> Ich habe den SDCC etwas intensiver mit MCS-51 genutzt, und so richtig
> begeistert war ich da nicht. Man muss schon wissen, was für Schwächen
> der Compiler hat, und dementsprechend Code schreiben, mit dem der gut
> klarkommt.

Magst du das mal näher ausführen? Ich wollte demnächst ein längeres 
Projekt mit dem machen (aber Z80). Auf was muss man da direkt achten, 
oder hilft nur stupide ASM lesen?

von Philipp Klaus K. (pkk)


Lesenswert?

greg schrieb:
> Kann der SDCC eigentlich wirklich PIC, oder tut der nur so? Die
> PIC-Unterstützung war ja lange Zeit sehr schlecht.

Vor etwa einem Jahr gab es zuletzt noch ein paar Verbesserungen bei den 
PIC. Das pic16-Backend ist deutlich besser als pic14. Aber das Niveau 
der anderen Backends erreichen beide nicht.

Da müsste mal jemand der die PIC kennt etwas Zeit reinstecken (und wohl 
auch in die gputils, die SDCC verwendet).

Philipp

von Philipp Klaus K. (pkk)


Lesenswert?

S. R. schrieb:
> greg schrieb:
>> Ich habe den SDCC etwas intensiver mit MCS-51 genutzt, und so richtig
>> begeistert war ich da nicht. Man muss schon wissen, was für Schwächen
>> der Compiler hat, und dementsprechend Code schreiben, mit dem der gut
>> klarkommt.
>
> Magst du das mal näher ausführen? Ich wollte demnächst ein längeres
> Projekt mit dem machen (aber Z80). Auf was muss man da direkt achten,
> oder hilft nur stupide ASM lesen?

Das mcs51-Backend ist eines der ältesten. Im Gegensatz zu pic14 sollte 
es da kaum Bugs geben. Allerdings wurden einige interessante 
Optimierungen, die in anderen Backends (stm8, z80 und verwandte, teils 
auch hc08, s08) implementiert wurden, bisher nicht für mcs51 
implementiert.

Das z80-Backend sollte ebenfalls kaum Bugs haben, und auch halbwegs 
brauchbaren Code erzeugen. Als Schwächen (also C-Code, für den SDCC 
manchmal wenig effizienten asm-Code generiert) fallen mir gerade ein: 
Zugriff auf Member von lokalen struct / union und arithmetische 
Operationen auf 32-bit Ganzzahlen.

Ansonsten gibt es auf https://sourceforge.net/p/sdcc/wiki/z80/ bzw. Im 
Kapitel 4.3 des Handbuchs noch ein paar Hinweise dazu, dem SDCC zu 
helfen, effizienten Code für Z80 zu generieren.

Philipp

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.