Forum: Compiler & IDEs Fehlermeldung in delay_basic.h


von lui (Gast)


Lesenswert?

Moin zusammen,

Ich habe ein Problem und zwar spuckt mir neuerdings der Compiler 3 
meldungen raus die aus der delay_basic.h kommen aber ich hab keine 
ahnung warum die erzeugt werden. hier die genauen fehler meldungen

e:/programme/winavr/bin/../avr/include/util/delay_basic.h:65: error: 
storage class specified for parameter '_delay_loop_1'
e:/programme/winavr/bin/../avr/include/util/delay_basic.h:66: error: 
storage class specified for parameter '_delay_loop_2'
e:/programme/winavr/bin/../avr/include/util/delay_basic.h:82: error: 
expected ';', ',' or ')' before '{' token

und hier der abschnitt aus der basic.h wo diese "erzeugt" werden.
1
#if !defined(__DOXYGEN__)
2
static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline));
3
static inline void _delay_loop_2(uint16_t __count) __attribute__((always_inline));
4
#endif
5
6
/** \ingroup util_delay_basic
7
8
    Delay loop using an 8-bit counter \c __count, so up to 256
9
    iterations are possible.  (The value 256 would have to be passed
10
    as 0.)  The loop executes three CPU cycles per iteration, not
11
    including the overhead the compiler needs to setup the counter
12
    register.
13
14
    Thus, at a CPU speed of 1 MHz, delays of up to 768 microseconds
15
    can be achieved.
16
*/
17
void
18
_delay_loop_1(uint8_t __count)
19
{
20
  __asm__ volatile (
21
    "1: dec %0" "\n\t"
22
    "brne 1b"
23
    : "=r" (__count)
24
    : "0" (__count)
25
  );
26
}

was läuft da falsch ? weiss das jmd eventuell ?

von lui (Gast)


Lesenswert?

Ich verwende in meinem Programm aber nur die funktion _delay_ms(200)

von Εrnst B. (ernst)


Lesenswert?

Hast du bei dir im Programm irgendwelche dubiosen #defines oder 
typedefs, die "uint8_t" verändern?

Versuch mal ein Mini-Programm, das nur aus main mit einem _delay_ms 
besteht, und schau ob das compiliert.

von Rolf Magnus (Gast)


Lesenswert?

Ich vermute den Fehler irgendwo in der Datei, die den Delay-Header 
einbindet.

von yalu (Gast)


Lesenswert?

Du hast in der Datei die delay.h includet oder in einer anderen
Header-Datei, die vor dem delay.h includet wird, vergessen, eine runde
Klammer zu schließen.

von lui (Gast)


Lesenswert?

ein einfaches Programm alá
1
#include <util/delay.h>
2
3
int main(void)
4
{
5
     
6
  _delay_ms(200);
7
8
}


funktioniert.

Also an Code verwende ich hier aus dem tutorial die LCD steuerung und 
dort wird sowas hier verwendet aber das hat sonst auch eigentlich 
funktioniert.
ich bekomm das programm auch irgenwie nicht mehr in den ursprungs 
zustand.
das sind insgesamt 4 kleine dateien soll ich die auch ma posten ? weil 
aus den codschnippseln wird bestimmt keiner schlau oder ?
1
// setzt den Cursor in Zeile y (1..4) Spalte x (0..20)
2
 
3
void set_cursor(uint8_t x, uint8_t y)
4
{
5
  uint8_t tmp;
6
 
7
  switch (y) {
8
    case 1: tmp=0x80+0x00+x; break;    // 1. Zeile
9
    case 2: tmp=0x80+0x40+x; break;    // 2. Zeile
10
    case 3: tmp=0x80+0x14+x; break;    // 3. Zeile
11
    case 4: tmp=0x80+0x54+x; break;    // 4. Zeile
12
  }
13
  lcd_command(tmp);
14
}

von lui (Gast)


Lesenswert?

mhm eine klammer vergessen :D ok bin mal auf der suche

von lui (Gast)


Lesenswert?

Ah ja gefunden.


Arg.

sagt diese fehlermeldung aus das irgenwo was fehlt ? oder ?

e:/programme/winavr/bin/../avr/include/util/delay_basic.h:82: error:
expected ';', ',' or ')' before '{' token

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Dieses Fehlermeldungs-Kauderwelsch kann man vermutlich nur dann
wirklich interpretieren, wenn man sich den Code nach dem Präprozessor
ansieht, also so, wie der Compiler ihn dann wirklich zu sehen
bekommt.

Dummerweise ist die Syntax von C zuweilen so verkorkst (durch
Mehrdeutigkeiten), dass man als Compiler kaum eine bessere Fehlermeldung
generieren kann, da die Zahl der Möglichkeiten, was die Ursache war,
teilweise recht groß ist.

Du hättest aber auch deinen tatsächlichen Code hier posten können,
glaub' mir, manch erfahrener C-Programmierer hier hätte das fehlende
Semikolon oder die fehlende Klammer schon noch vor dir entdeckt...  Du
kannst prinzipiell erstmal davon ausgehen, dass die Headerdateien als
solche in sich korrekt sind und nicht grundsätzlich bei jedem
derartige Fehlermeldungen generieren.

von lui (Gast)


Angehängte Dateien:

Lesenswert?

Jo das der fehler nicht an der Header Datei liegt hab ich mir schon 
gedacht. Aber grade deswegen war ich verwundert warum die Header Datei 
als fehler quelle angegeben worden ist.


Und den C-Text hier zu posten das wollte ich euch eigentlich nicht über 
euch ergehen lassen in einem c Text von mir zu lesen. Ich programmier c 
eigentlich erst seit 1ner woche oder so :o)

Aber ich poste mal alles dann kannste ja mal gucken ;).


ich find es immer spannend in "fremden" c code zu schnüffeln und zu 
gucken wie so manch einer die sachen realisiert hat.

von lui (Gast)


Angehängte Dateien:

Lesenswert?

Das ist auch noch von mir

von lui (Gast)


Angehängte Dateien:

Lesenswert?

die hab ich etwas verändert

von lui (Gast)


Angehängte Dateien:

Lesenswert?

Und die ist aus dem tutorial.


Wie kann man eigentlich mehrer dateien in eine antwort packen ?

von Ulrich (Gast)


Lesenswert?

in dem man es verzipt (*.zip) oder verrart (*.rar)

von yalu (Gast)


Lesenswert?

Bei mir erscheinen keine Fehler, nur ein paar Warnungen wegen
fehlender Funktionsprototypen.

von Kai G. (runtimeterror)


Lesenswert?

>in dem man es verzipt (*.zip) oder verrart (*.rar)
Wenn, dann zip - rar wird nicht gerne gesehen. Solange es nicht zu viel 
wird ist es auch kein Problem mehrere Beiträge zu verfassen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

lui wrote:

[lcd-routines.h]

> die hab ich etwas verändert

Und seither funktioniert es?

In dieser hätte ich den Fehler gesucht, da sie unmittelbar vor
<avr/delay_basic.h> eingebunden wird.  Damit kann man sich einen
Fehler aus dieser Datei heraus in die nächste ,,verschleppen''.

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.