|
Ein traditionelles "Hallo Welt"-Programm für Mikrocontroller ist eine blinkende Leuchtdiode. Mit dieser Tradition wird auch hier nicht gebrochen.
Verbinden sie wie im Schaltbild links den Programmer mit dem Mikrocontroller, evtl. auch auf einem Steckbrett.
|
Starten sie Geany (wahlweise auf der Konsole auch CIDE) und laden sie dort das Programm blink.c im Ordner blink. Drücken sie die
Taste F8 oder klicken wahlweise auf das Icon zum Compilieren eines Programms. Nach Beendigung des Compiler- Linkergangs betätigen sie die
Taste F9 oder wahlweise ein Klicken auf das Icon zum Flashen.
Die LED sollte nun blinken !
Viel Spaß beim Ausprobieren der anderen Beispielprogramme und beim Experimentieren mit CH32V003
Die Sache mit dem Makefile
|
Auf diesen Seiten wurde bereits hingewiesen, dass beim Erstellen von Programmen das sogenannte Makefile Verwendung findet. Hier soll
jetzt hinsichtlich einer Programmerstellung für CH32V003 erläutert werden, wie die aus dem Archiv entpackten Programme mit einem
Makefile zu einem lauffähigen Binary compiliert und geflasht werden.
Grundsätzlich gibt es zu jedem einzelnen Projekt ein eigenes Makefile. Makefiles können so geschrieben sein, dass sie zusätzlich zum
Aufruf mittels make ein weiteres Argument beinhalten können. Im hier vorliegenden Fall kann ein Makefile folgendermaßen
aufgerufen werden:
- make
- make all
- make / make all (beide Aufrufe bewirken dasselbe) compiliert alle zu einem Programm gehörenden Quelldateien und linkt
diese zu einem Programm mit dem Format .elf, .hex und .bin zusammen, welches hier ein auf einem CH32V003 lauffähiges
Programm darstellt. Je nach Programmer wird einer dieser Dateien benötigt um damit einen CH32V003 flashen zu können.
Der Selbstbauprogrammer verwendet das .bin Format
- make flash
- make flash programmiert einen Controller mit einem mit make zuvor erstellen .bin Programme
- make clean
- make clean löscht alle die Dateien, die mit make / make all erstellt werden. Das ist vor allen Dingen dann hilfreich, wenn
eine Datei die nicht die Main-Funktion des Programms beinhaltet bearbeitet worden ist. Durch das Löschen aller Dateien wird
sicher gestellt, dass bei einem Compiler- / Linkvorgang die editierte Quelldatei ebenfalls neu übersetzt wird.
Hinweis: make ist ein im Linux vorhandenes Programm das bei Aufruf die Angaben, die in Makefile gemacht
werden auswertet und ausführt.
Da die Syntax eines Makefile sich bisweilen (zumindest für den Autor) sehr kryptisch anmutet und er bisweilen auch nachlesen muß
wie genau etwas funktioniert, wurde das Makefile "aufgetrennt". Im Makefile selbst, welches in jedem Projektordner liegen muß das
compiliert werden soll, müssen nur Angaben über den Projektnamen, zusätzlich zu verwendenden Quelldateien und den zu verwendenden
Programmer gemacht werden (die zu machenden Angaben hier sind sehr überschaubar). Dieses Makefile bindet (inkludiert) eine
Datei makefile.mk im übergeordneten Verzeichnis (das Stammverzeichnis CH32V003) ein. Jedes Projekt inkludiert diese Datei, deshalb
sollte diese Datei, wenn überhaupt, nur mit sehr großer Vorsicht bearbeitet werden. makefile.mk stellt hier den funktionalen Teil des
Compilierens dar und erstellt CH32V003 Programme für ein System mit 48 MHz interner Taktfrequenz und schaltet mit Systemstart
alle GPIO Anschlüsse ein.
Für ein neues Projekt ist es eine gute Idee, einen neuen Ordner anzulegen und das Makefile aus einem bestehenden Projekt in diesen neuen
Ordner zu kopieren und dann entsprechend dem neuen Projekt zu bearbeiten.
Aufbau eines Makefile für CH32V003 an einem Beispiel
|
Am Beispiel für das Programm uart_demo (im gleichnahmigen Verzeichnis) soll ein Makefileaufbau erläutert werden:
############################################################
#
# Makefile
#
############################################################
PROJECT = uart_demo
# hier alle zusaetzlichen Softwaremodule angegeben
SRC = ../src/uart.c
SRC += ../src/my_printf.c
SRC += ../src/term_colpos.c
INC_DIR = -I ./ -I ../include
# Programmerauswahl
# fuer USE_ARDULINK = 1 wird der Arduinoprogrammer verwendet, in diesem
# Fall muss zusaetzlich der serielle Port angegeben werden
# fuer USE_ARDULINK = 0 wird WCH-LINKE verwendet wird die
# serielle Portangabe hier ignoriert
PROGPORT = /dev/ttyUSB0
USE_ARDULINK = 0
include ../ch32v003.mk
|
Ein Makefile arbeitet ähnlich einer Programmiersprache mit Variablen / Konstanten (der Autor weiß nicht, ob dieses die korrekte
Bezeichnung ist aber glaubt, dass das verständlich ausgedrückt ist).
In diesem "Benutzerteil" des Makefile gibt es Variable, die von der später inkludierten Datei ../ch32v003.mk ausgewertet werden.
Diese sind:
- PROJECT
- SRC
- INC_DIR
- PROGPORT
- USE_ARDULINK
Für PROJECT ist der Name der Datei OHNE die Erweiterung .c anzugeben, die die Main-Funktion des Programms
beinhaltet. Von daher ist es also vorgegeben, dass diese Datei zwingend auf dem Datenträger mit der Namensendung .c gespeichert vorliegen muß.
Hier wird also das Programm uart_demo.c compiliert und gelinkt werden.
Mit SRC werden alle zusätzlichen Quelldateien angegeben, die übersetzt und in das Programm mit eingebunden werden sollen. Eine erste
einzubindende Datei wird nur mit einem "=" Zeichen zugewiesen, jede weitere einzubindende Datei mit "+=".
Im vorliegenden Fall werden also im übergeordneten Verzeichnis und dort im Verzeichnis src die Dateien uart.c, my_printf.c und
term_colpos.c mit eingebunden. Die Angaben der Dateinamen sind MIT der Dateinamensendung .c anzugeben.
Hier ist jetzt zu erkennen, dass im übergeordneten Verzeichnis ein Verzeichnis src existiert, in dem alle zusätzlich vorhandenen
Quelldateien gespeichert sind.
Mit INC_DIR wird der Suchpfad angegeben, nachdem der Compiler einzubindende Dateien, meistens Header, suchen soll. Im vorliegenden Beispiel
sucht der Compiler also zuerst in dem Projektverzeichnis ( -I ./ ) nach der Datei, wird er dort nicht fündig, sucht er im
übergeordneten Verzeichnis und dort im Verzeichnis include ( -I ../include). Wird der Compiler im Projektverzeichnis fündig, wird
eine eventuell im ../include Ordner ignoriert. Das Speichern eines Headers im Projektordner macht dann Sinn, wenn bspw. GPIO-Pins,
die Hardware steuern und nur für dieses eine Projekt gelten sollen.
USE_ARDULINK gibt an, welcher Programmer bei einem Flash-Vorgang zu verwenden ist. Mit der Benutzung des Selbstbauprogrammers
oder eines originalen WCH-LinkE ist hier der Wert 0 anzugeben. Eine 1 gibt an, dass der Arduino basierende Programmer
(der zum Flashen des Selbstbauprogrammers benötigt wurde) zu verwenden ist. In aller Regel wird man diesen ARDULINK jedoch nicht
verwenden, sobald eben ein deutlich besserer Programmer vorliegt.
PROGPORT gibt an, welcher Anschluss verwendet werden soll, sollte der Arduino-Programmer zum Einsatz kommen. Ist in
USE_ARDULINK der Wert 0 angegeben hat die Angabe in PROGPORT keinerlei Wirkung.
|