sdcc source code in mehrere Dateien aufteilen

OP #5876857
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ß
Angehängte Dateien:
#5876864
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.