Forum: Mikrocontroller und Digitale Elektronik SDCC selbst mitentwickeln.


von skorpionx (Gast)


Lesenswert?

Ich habe mir vorgenommen etwas in die Entwicklung von SDCC 
reinzuschauen.  Als Werkzeug dazu möchte ich C++Builder verwenden. Ich 
hoffe das auch das Debugen von C-Programmen auch dabei möglich wird. 
Mein erster Schritt in diese Richtung ist der Versuch dir 
snapshots/sdd-src zu kompilieren.
Später werde ich mich nur auf zwei für mich interessanten Prozessoren
AVR und PIC konzentrieren.

Meine erste Schritte:

1. http://totato.com/  : EOL Konverter ermöglicht Wandlung von 
Textdateien  Linux <->
 Windows

2. http://particle.teco.edu/software/sdcc/sdcc-archiv.html : SDCC_MinGW 
laden und installieren (Z.B. auf dem Laufwerk C:) .
 Vom  Verzeichnis C:\SDCC_MinGW\msys\1.0\bin  gawk.exe  in
  das Verzeichnis C:\SDCC_MinGW\MinGW\bin kopieren.
 PATH ändern: Start -> Systemsteuerung -> Sytem -> Erweitert ->
 Umgebungsvariablen -> Path -> Bearbeiten.  Am Ende einfügen:
  ;C:\SDCC_MinGW\MinGW\bin


3. 
http://www.koders.com/c/fid4E21E60DED227318812EA3BE4582C011C303524B.aspx
    Files: aslex.c und asm.h laden.
    C++Builder öffnen und dann: Neue->Anwendung->Weitere->C-Datei.
    Weiter dem Projekt   beide Dateien  aspex.c und asm.h hinzufügen.
    Menue Sart->Start  (oder F9) wählen.
    So wurde aslex.obj erstellt.

4. http://sdcc.sourceforge.net/snap.php
    Aktuelle SDCC Source Code (sdcc-src)
  (Z.B. 
http://sdcc.sourceforge.net/snapshots/sdcc-src/sdcc-src-20090101-5312.tar.bz2) 
laden.
    Das gepackte File entpacken in C:\. Dann entsteht Verzeichnis
    C:\sdcc\...

5. Jetzt habe ich das aslex.obj in alle Unterverzeichnisse kopiert:
  C:\sdcc\as\asxxsrc
  C:\sdcc\as\hc08
  C:\sdcc\as\mcs51
C:\sdcc\as\xa51
C:\sdcc\as\z80

6. Jetzt:  Start->Alle Programme_>Zubehör->Eingabeanforderung.
  Dann über bekannte Dos-Befehle (cd \, cd sdcc) in das Verzeichnis 
c:\sdcc.
  Jetzt in der Kommandozeile tippen: make –fMakefile.bcc >meldungen.txt

7. Alle Meldungen wurden in das File meldungen.txt geschrieben.
   Es sind 4 Fehler aufgetreten:

Fehler E2468 ralloc.c 1399: Ein Wert vom Typ void ist nicht zulässig in 
Funktion createStackSpil
Fehler E2468 ralloc.c 1483: Ein Wert vom Typ void ist nicht zulässig in 
Funktion isSpiltOnStack
Fehler E2468 ralloc.c 1512: Ein Wert vom Typ void ist nicht zulässig in 
Funktion spillThis
Fehler E2468 ralloc.c 1562: Ein Wert vom Typ void ist nicht zulässig in 
Funktion selectSpil

Alle Fehler (in C:\sdcc\src\pic\ ralloc.c) haben Verbindung zum Makro:
#define FENTRY2                 1 ? (void)0 : printf


Ein Anruf:
 FENTRY2("called.");
führt zum  Fehler;

“C” gibt es grenzlose Möglichkeiten. Manche führen jedoch zum „Absurdum“
Was bezweckte der Entwickler bei dem Makro?
Vorläufig habe ich  das Makro geändert:
#define FENTRY2                 printf

In der Kommandozeile getippt: make –fMakefile.bcc >meldungen.txt
Jetzt wird einen  Fehler gemeldet:
Fehler E2063 glue.c 142: Unzulässige Initialisierung in Funktion 
pic14_constructAbsMap.
Die  Zeile 142 im File c:\sdcc\src\pic\glue.c:
  memmap *maps[] = { data, sfr, NULL };

Vielleicht weiß schon jemand etwas dazu…

von Boris Bukowski (Gast)


Lesenswert?

Hi,

ich würde dir raten, erstmal den Compiler zu benutzen, den das Projekt 
nutzt.

Von der Webseite:
---snip---
What Platforms are Supported?

Linux - x86, Microsoft Windows - x86 and Mac OS X are the primary, so 
called "officially supported" platforms.

SDCC compiles natively on Linux and Mac OS X using using gcc. Windows 
release and snapshot builds are made by cross compiling to mingw32 on a 
Linux host.

Windows 9x/NT/2000/XP users are recommended to use Cygwin 
(http://sources.redhat.com/cygwin/) or may try the unsupported Borland C 
compiler or Microsoft Visual C++ build scripts.
---snip---

Wenn das läuft, kannst du immer noch versuchen, das ganze auf andere 
Compiler
zu portieren.

Boris

von skorpionx (Gast)


Lesenswert?

Kannst du mir einen guten Compiler für Cygwin oder MingW empfählen?
Mit Src-Debugen und vernünftiger Entwicklungsumgebung..

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Stell Borland mal auf C99 um, das sollte das Problem mit der 
Initialisierung lösen. Ansonsten gcc + beliebiger Editor/IDE (z.B. 
Eclipse). Debugger sollte bei der Compilerentwicklung nicht unbedingt 
notwendig sein, wenn doch kannst du gdb verwenden.

von Arno Nyhm (Gast)


Lesenswert?

>> 1 ? (void)0 : printf

...das kann doch nur ein böser Hack von eime Programmierer sein, etwas 
zu realisieren was der Compiler anders anmäkeln würde...

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.