COSMIC liefert merkwürdigen Fehler bei C-Datei

OP #4574949
Lesenswert?
• ▲
▼
Hallo,
ich versuche gerade, diverse Funktionen in Dateien auszulagern damit 
mein Code übersichtlicher wird.
Dabei hab ich eine klassische delay Funktion geschrieben.
Zuerst hab ich eine Header-Datei so erstellt:
1
void delayms(uint16_t ms);

dann meine Datei *delay.c*:
1
void delayms(uint16_t ms){
2
  while(--ms){
3
    uint16_t i = 0;
4
    for(i = 0; i < ms; i++{
5
      nop();
6
    }
7
  }
8
}

versuche ich das ganze nun zu kompilieren, kommt diese Fehlermeldung:
1
#error cpstm8 delay.c:1(13+8) missing )
2
#error cpstm8 delay.c:3(16) missing ;
3
#error cpstm8 delay.c:4(11) incomplete declaration
4
#error cpstm8 delay.c:4(13) missing ;
5
#error cpstm8 delay.c:4(21) missing ;
6
#error cpstm8 delay.c:5(8) missing ;
7
#error cpstm8 delay.c:8(0) incomplete declaration
8
delay.c:
9
 The command: "cxstm8 -istm8_periph_libs\inc +debug -pxp -no -l +mods0 -pp -i"C:\Program Files (x86)\COSMIC\FSE_Compilers\Hstm8"  -clDebug\ -coDebug\ delay.c " has failed, the returned value is: 1
10
exit code=1.

Wenn ich den gleichen Code jedoch in meinem Projekt benutze, wird 
einwandfrei kompiliert?
Wo liegt mein Fehler?
Gast #4574967
Lesenswert?
• ▲
▼
> Wo steht das?

Zeilen und Spalten auszählen (eine brauchbare IDE macht das für Dich, 
sonst händisch), er meckert am Ende der 'uint16_t'. Und er beschwert 
sich, dass i 'incomplete' ist.

> Anyway: warum kennt er kein uint16_t?

Weil Du es ihm nicht bekannt gemacht hast. Entweder selber (typdef, 
define ∗hüstel∗) oder vorgefertig (Stichwort stdint.h/inttypes.h)

HTH
OP #4574975
Lesenswert?
• ▲
▼
Das kann doch nicht sein, dass ich dem Compiler die Datentypen nochmal 
erklären muss? Ich hab diverse andere Dateien erstellt in denen 
Funktionen sind, die auch Datentypen beinhalten (z.B. long, char) und da 
klappts auch ohne Fehlermeldung!

Niklas G. schrieb:
> Seh ich das richtig? Du möchtest n*(n-1)=n²-n mal "nop" durchführen? War
> das beabsichtigt?!

Ja, wieso?
Gast #4574984
Lesenswert?
• ▲
▼
> Das kann doch nicht sein, dass ich dem Compiler die Datentypen nochmal
> erklären muss? Ich hab diverse andere Dateien erstellt in denen
> Funktionen sind, die auch Datentypen beinhalten (z.B. long, char) und da
> klappts auch ohne Fehlermeldung!

Im Gegensatz zu long und char sind ∗int∗_t keine keine nativen 
Datentypen im Sinne des Vorhandenseins im Grundstock der Typen. Sie 
wurden in C99 standardisiert, dafür gibts die stdint.h.

Für weitere Fragen in diese Richtung ein x-beliebiges Lehrbuch zu C oder 
einfach den Standard lesen.

HTH
Persönliche Seite #4574985
Lesenswert?
• ▲
▼
Max M. schrieb:
> Das kann doch nicht sein, dass ich dem Compiler die Datentypen nochmal
> erklären muss?
Doch, musst du.

Max M. schrieb:
> Ich hab diverse andere Dateien erstellt in denen
> Funktionen sind, die auch Datentypen beinhalten (z.B. long, char) und da
> klappts auch ohne Fehlermeldung!
(unsigned/short/signed/long) char, short, int, long, float, double sind 
"built-in" Typen, die kennt der Compiler so. Alle anderen Typen muss man 
ihm erst beibringen. Für uint16_t und co gibt es die <stdint.h> .

Max M. schrieb:
> Ja, wieso?
Klingt etwas ungewöhnlich, ein Delay mit quadratischer Laufzeit. Der 
Name "ms", also Millisekunden, ist dann etwas irreführend.
#4575088
Lesenswert?
• ▲
▼
Max M. schrieb:
> Wo steht das? Ich sehe nur Fehlermeldungen, dass ich angeblich Klammern
> vergessen habe?
> Anyway: warum kennt er kein uint16_t? Im Hauptprogramm gibts das ja
> auch?

Dort gibt es sicher auch ein
1
#include <stdint.h>
oder
1
#include <inttypes.h>

Normales int ist eben 16,32 Ode 64 Bit breit und int16_t dann eben int 
oder short oder was auch immer die Plattform braucht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren