Neues Target für ECO-C

Zuerst: Neuer Target-Name

(Das "Target" ist der Rechner auf dem Ihre - mit ECO-C compilierten - Programme laufen z.B. ZWERG332.)

  1. Wählen Sie einen Namen für Ihr Target (mytarget).

  2. Angenommen Sie haben ECO-C in "...irgendwo...\eco" installiert. Legen Sie folgende Verzeichnisse an:
    eco\include\mytarget
    eco\lib\mytarget
    eco\libsrc\mytarget

  3. Wählen Sie unter den vorhandenen Targets ein - Ihrem Target möglichst ähnliches - Target aus:
    Angenommen Ihr Target benutzt einen MC68332, dann wählen Sie zwerg332 (Wenn Ihr Target einen MC68xxx benutzt, der bei keinem der vohandenen Targets dabei ist, dann wählen Sie ebenfalls zwerg332, müssen aber zusätzlich die Datei "mc68xxx.h" in "eco\include\sys" anlegen (nehmen Sie "mc68332.h" in diesem Verzeichnis als Beispiel).
    Kopieren Sie alle Dateien in "eco\libsrc\zwerg332" nach "eco\libsrc\mytarget".

  4. Wechseln Sie nach "eco\libsrc\sysshare" und editieren Sie "delay.c".
    Wenn Ihr Programmspeicher 8Bit breit ist, fügen Sie "|| defined mytarget" in der Zeile in der "zwerg332" definiert ist ein.
    Ist Ihr Programmspeicher 16Bit breit ist, fügen Sie "|| defined mytarget" in der Zeile in der "mega332" definiert ist ein.
    (Dies wirkt sich nur auf die Genauigkeit der _delay-Funktion aus.)

  5. Wechseln Sie nach "eco\libsrc\mytarget" und editieren Sie "makefile". Ersetzen Sie überall "zwerg332" durch "mytarget".

  6. Führen Sie folgende Befehle aus:
    make clean
    make
    make install

Jetzt können Sie Programme für mytarget übersetzen. Dazu müssen Sie nach dem Target-Namen noch den CPU-Typ und die Familie (mit ":" getrennt) angeben, also

ecoc -target mytarget:cpu32:m68k ...

Das Ergebnis ist allerdings genauso, als hätten Sie "-target zwerg332" angegeben, denn bis hierher haben Sie lediglich einen neuen Target-Namen und die notwendige Umgebung kreiert, damit ECO-C Programme für diesen Target-Namen übersetzen kann.
Das Target selbst (d.h. die Libs, Include-Dateien etc.) ist natürlich voll identisch mit zwerg332.

Nächster Schritt: Die "richtige" Anpassung

Vermutlich hat Ihr Target "'ne Menge drauf" (RTC, UARTs, ADC/DAC CAN... ). Für die Anpassung sollten Sie sich für's erste auf zwei Punkte beschränken: Den Startup-Code und die Basis-I/O-Funktionen für die serielle Schnittstelle.
Eine Minimal-Anpassung die es ermöglicht, EPROM-Code für mytarget zu generieren, erfordert die Modifizierung folgender Dateien:

target.h Target-Beschreibung, hier befinden sich targetspezifische Definitionen, wie Memory-Map, Waitstates, Vektornummern...
srt0.c Startup-Code, hier werden die Chip-Selects und der Stackpointer entsprechend der Memory-Map gesetzt, die Standard I/O-Kanäle geöffnet (stdin, stdout, stderr), und schließlich "main" aufgerufen.
io.c Hier befinden sich die Basis-I/O-Funktionen für targetspezifische Peripherie.
sysclock.c Hier wird ein periodischer Interrupt zur Realisierung der clock-Funktion installiert.
rom.ld ROM-Linker-Script, hier werden die Segmentadressen "text", "data" und "bss" festgelegt, damit Programme für die targetspezifische Speicherkonfiguration übersetzt werden.

Zum Schluss...

Jetzt können Sie ein Programm (z.B. hello.c) für mytarget übersetzen:

ecoc -target mytarget:cpu32:m68k -rom hello.c
mkrom a.out a.rom

Beispiel

-> Minimales mytarget-Verzeichnis
-> Testprogramm für mytarget (Benutzt die serielle Schnittstelle und den Timer-Interrupt.)

Das Beispiel setzt folgende Konfiguration voraus:

Abhängig von Ihrer Hardware müssen Sie die Programmierung der Chip-Selects, der Baudrate und der Timer-Periode entsprechend ändern.

Wichtig, wenn das RAM NICHT ab 0 liegt:

Das Makro "EXCEPT_VEC(n)" geht von der Vektor-Basis 0 aus. Um die korrekte Vektoradresse zu erhalten, benutzen Sie "EXCEPT_VEC(RAM_BASE/4+n)".

www.mct.de