Forum: Compiler & IDEs SDCC PICs selber hinzufügen


von Philipp B. (phbu)


Lesenswert?

Hallo Forumnutzer,


aktuell versuche ich gerade den Einstieg in die PIC-Welt zu wagen. Ich 
hatte schon zufälligerweise 10 PIC16F54IOs hier liegen und wollte damit 
rumexperimentieren.

Wenn ich allerdings für diesen mit dem sdcc Version 3.3.0 unter Linux 
mit folgender Befehlszeile kompilieren möchte
1
sdcc -mpic14 -p16f54 -o out.hex main.c
sagt er mir, dass dieser nicht unterstützt wird.

Gibt es eine Möglichkeit, den PIC16F54 sdcc bekannt zu machen (über 
Konfigurationsdateien o.ä.)?
Unter /usr/share/sdcc/include/pic14/ unter Linux gibt es ja die 
pic14devices.txt. Kann man dort PICs hinzufügen?

Natürlich kann ich auch andere PIC-C-Compiler verwenden. Hatte es jetzt 
erstmal nur mit sdcc versucht.

Ich freue mich auf die Antworten!


Mit freundlichen Grüßen
PHBU


P.S.: Der Compiler sollte den o.g. PIC16F54-I/O sowie den PIC16F747-I/P 
unterstützen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Einfach in eine Konfigurationsdatei etwas hineinzuschreiben wird nicht 
reichen.

Du könntest, wenn Du ernsthaft daran interessiert bist, zum Compiler 
beizutragen, Dich mit dem Verantwortlichen für den PIC14-Teil des 
Compilers in Verbindung setzen.

Den findest Du hier:

http://sdcc.sourceforge.net/

von Philipp B. (phbu)


Lesenswert?

Hallo rufus,


habe sdcc geupdated auf 3.6.0. Der PIC16F747 würde jetzt funktioniert. 
Beim anderen muss ich mich nochmal später erkundigen.

Habe allerdings jetzt ein neues Anfängerproblem...

Ich habe folgenden simplen C-Code:
1
#include<stdint.h>
2
3
/// globale Variablen/Konstanten
4
5
void main(void){
6
  /// Initialisierungen
7
  
8
  while(1){
9
    /// Hauptprogramm
10
    
11
  }
12
}

Wenn ich das ganze mit folgendem Befehl kompiliere
1
/opt/sdcc-3.6.0-rc1/bin/sdcc --opt-code-size -I "/opt/sdcc-3.6.0-rc1/share/sdcc/include" --use-non-free -mpic14 -p16f747 -o out main.c

erhalte ich folgende HEX-Datei:
1
:020000040000FA
2
:1000000000008A110328D330FE000030FF0080304A
3
:100010008A110000B2208A11000083120313A1008C
4
:100020007F08A000D530A2000030A3008312031384
5
:100030002008A4002108A500FF30A007031CA1038D
6
:100040002408250403199B2804302207A400A501D5
7
:10005000A50D2308A5072408FE002508FF00803011
8
:100060008A110000B2208A11000083120313A70036
9
:100070007F08A6002208FE002308FF0080308A11B6
10
:100080000000B2208A11000083120313A900A5000A
11
:100090007F08A800A40002302207A400A501A50D36
12
:1000A0002308A5072408FE002508FF0080308A11D8
13
:1000B0000000B2208A11000083120313A500AB00D8
14
:1000C0007F08A400AA00831203132608AA002708A9
15
:1000D000AB00FF30A607031CA7032A082B04031953
16
:1000E00094282808FE002908FF0080308A110000AB
17
:1000F0009F208A11000083120313AA002408831290
18
:1001000003138400831383120313251883172A080B
19
:1001100083120313800083120313A80A0319A90A88
20
:10012000A40A0319A50A6328063083120313A20741
21
:100130000318A30A16288A110000DB280800003AD9
22
:100140000319A628803A0319AD2800347E088400DC
23
:1001500083137F188317000808007F088A007E0831
24
:1001600082000800003A0319BA28803A0319C4280B
25
:10017000FF0100347E08840083137F188317000872
26
:10018000FF00840A000808008A110000AD20FD006D
27
:10019000FE0FFF03FF0A8A110000AD20FC007D085E
28
:1001A000FF007C08080001340034DD3400342C34B6
29
:0C01B000003401340034DB280800003467
30
:00000001FF

Diese ist 1,3 kB groß. Ich glaube nicht, dass das stimmen kann. Ein 
Programm, dass nichts macht kann doch niemals so viel Speicher im µC 
verwenden!?

Was mache ich falsch?

Freue mich auf Antworten!


Mit freundlichen Grüßen
PHBU

von Carl D. (jcw2)


Lesenswert?

die Hexdatei enthält hex 1BC Byte Code, das sind 444 Byte oder 0,4 kB.

Nicht wenig für eine leere Schleife, aber auch nicht schlimm. Zumal PIC 
ja 2Byte pro Befehl (10..16Bit) hat, d.h. 222 Befehle.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jedes C-Programm enthält diversen Startup-Code, der den Speicher und 
gegebenenfalls auch anderes vorbereitet und dann die Funktion main() 
aufruft.

Von Deinen 444 Bytes wird das ein gewisser Teil sein.

von W.S. (Gast)


Lesenswert?

Ich hatte mal nen Kollegen, der angesichts eines winzigen PIC's im SOT23 
mit 256 Programmschritten sagte "Ich sehe keinen Grund, diesen PIC 
nicht in C zu programmieren".

So ähnlich sieht es hier wohl aus: 512 Programmschritte und 25 Byte RAM 
für nen PIC16F54 - soweit ich mich erinnere. Da kann ich nur eines 
sagen: wer so ein Teil nicht in Assembler programmiert und stattdessen 
partout C benutzen will, dem ist nicht zu helfen.

W.S.

von Carl D. (jcw2)


Lesenswert?

Es werden doch erst 222 benutzt, also sind noch 290 Befehle frei. Wenn 
man damit auskommt, warum dann nicht C? Weil man gerne 50% FLASH frei 
hat?

von Witkatz :. (wit)


Angehängte Dateien:

Lesenswert?

Philipp B. schrieb:
> erhalte ich folgende HEX-Datei:

Ich hab's mal Spaßeshalber disassembliert, s. Anhang,
immerhin findet sich die Endlosschleife drin ;-)
1
LADR_0x00DB
2
    GOTO LADR_0x00DB

von Pic T. (pic)


Lesenswert?

Such den c und nicht den f Typ.
Weiters , ist dieser type nicht ein 12er? Deine Kommandozeile war für 
ein14.

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.