Fehlermeldung in delay_basic.h

Gast #871215
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 ?
Gast #871238
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
}
Moderator Persönliche Seite #871268
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.
Gast #871383
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.
Angehängte Dateien:

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