Forum: Mikrocontroller und Digitale Elektronik sdcc source code in mehrere Dateien aufteilen


von Patrick S. (pad)


Angehängte Dateien:

Lesenswert?

Moin zusammen,

ich grübel grade über einem Problem. Vielleicht weiß ja einer von euch 
weiter. Ich teste grade verschiedene STM8 Controller. Als Compiler nutze 
ich SDCC(3.9.0) auf einem Linux Mint 19.
Zu Anfang habe ich den kompletten Code in der main.c gelassen. 
Compiliere ich diese (mit sdcc -mstm8 main.c) klappt das. Siehe alle 
angehängten Files mit _ver1.
Teile ich meinen Code auf mehrere Files auf muss ich zuerst die 
einzelnen Files Compilieren, so will es das Manual. Dabei habe ich 
plötzlich Compilerfehler (stm8s.h:266: syntax error: token -> 'ODR' ; 
column 22). Der gleiche Header ist in der ersten Version aber auch 
eingebunden und wird auch genutzt. Die nicht funktionierende Version ist 
als _ver2 angehängt.

Hat vielleicht jemand eine Idee was hier falsch läuft?

Gruß

von Philipp Klaus K. (pkk)


Lesenswert?

Patrick S. schrieb:
> Moin zusammen,
>
> ich grübel grade über einem Problem. Vielleicht weiß ja einer von euch
> weiter. Ich teste grade verschiedene STM8 Controller. Als Compiler nutze
> ich SDCC(3.9.0) auf einem Linux Mint 19.
> Zu Anfang habe ich den kompletten Code in der main.c gelassen.
> Compiliere ich diese (mit sdcc -mstm8 main.c) klappt das. Siehe alle
> angehängten Files mit _ver1.
> Teile ich meinen Code auf mehrere Files auf muss ich zuerst die
> einzelnen Files Compilieren, so will es das Manual. Dabei habe ich
> plötzlich Compilerfehler (stm8s.h:266: syntax error: token -> 'ODR' ;
> column 22). Der gleiche Header ist in der ersten Version aber auch
> eingebunden und wird auch genutzt. Die nicht funktionierende Version ist
> als _ver2 angehängt.
>
> Hat vielleicht jemand eine Idee was hier falsch läuft?
>
> Gruß

Sieht nicht nach einem SDCC-, sondern einem C-Problem aus:

Deine stm8s.h benutzt Datentypen aus stdint.h.

In deiner alten main.c bindest du zuerst stdint.h, dann stm8.h ein, was 
klappt.

Bei deiner Aufteilung bindest du aber in gpio_ver2.c über gpio_ver2.h 
stm8s.h ein, ohne vorher stdint.h einzubinden.

Eleganter wäre wohl, wenn stm8s.h direkt am Anfang stdint.h einbinden 
würde, um derartige Probleme zu vermeiden.

Philipp

von Patrick S. (pad)


Lesenswert?

Ach verdammt, das war es. Habe ich echt nicht gesehen. Vielen Dank für 
den Tipp, so klappt es natürlich.

Gruß

Patrick

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.