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.)
Wählen Sie einen Namen für Ihr Target (mytarget).
Angenommen Sie haben ECO-C in "...irgendwo...\eco" installiert. Legen Sie folgende Verzeichnisse an:
eco\include\mytarget
eco\lib\mytarget
eco\libsrc\mytargetWä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".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.)Wechseln Sie nach "eco\libsrc\mytarget" und editieren Sie "makefile". Ersetzen Sie überall "zwerg332" durch "mytarget".
Führen Sie folgende Befehle aus:
make clean
make
make installJetzt 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...
Editieren Sie "eco\libsrc\mytarget\makefile".
Ersetzen Sie "$(rtc421obj)" durch "rtcdummy.o".
Löschen Sie die Zeile "libg =... ".
Löschen Sie die Zeile "liba =... ".Ein Target ohne RTC ist z.B. "herman20". Dort befindet sich eine Datei, die dummy-Funktionen für die RTC zur Verfügung stellt.
Kopieren Sie "eco\libsrc\herman20\rtcdummy.c" nach "eco\libsrc\mytarget".Führen Sie folgende Befehle aus:
make clean
make
make installJetzt 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.romBeispiel
Minimales mytarget-Verzeichnis
Testprogramm für mytarget (Benutzt die serielle Schnittstelle und den Timer-Interrupt.)
Das Beispiel setzt folgende Konfiguration voraus:
16.78MHz Takt
256KB EPROM
16Bit breit, ab 0
CSBOOT für read-only word256KB RAM
16Bit breit, ab 0x100000
CS0 für read/write lower byte
CS1 für read/write upper byteAbhä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