Forum: Mikrocontroller und Digitale Elektronik Error: expected ')' before


von modul (Gast)


Lesenswert?

Hallo
Ich hab folgenden Code:
1
#include <avr/io.h>
2
#include "pins.h"
3
4
int main(void)
5
{
6
  set_low(0, DDRD, PORTD);
7
    while(1)
8
    {
9
        //TODO:: Please write your application code 
10
    }
11
}
1
#ifndef PINS_H_
2
#define PINS_H_
3
4
void set_hight(uint8_t pin, uint8_t ddr, uint8_t port);    // Error
5
void set_low(uint8_t pin, uint8_t ddr, uint8_t port);      // Error
6
7
#endif
1
#include "pins.h"
2
3
void set_hight(uint8_t pin, uint8_t ddr, uint8_t port){    // Error
4
  ddr = ddr | (1<<pin);
5
  port = port | (1<<pin);
6
}
7
void set_low(uint8_t pin, uint8_t ddr, uint8_t port){      // Error
8
  ddr = ddr && !(1<<pin);
9
  port = port && !(1<<pin);
10
}
Nun bekomme ich viermal folgenden Error in den markierten Zeilen:
expected ')' before 'pin'

Was mach ich denn da falsch? Hab schon ein bischen im Internet gesucht 
und bin darauf gestoßen, dass uint8_t unbekannt ist!?

von g457 (Gast)


Lesenswert?

> Was mach ich denn da falsch?

Du ignorierst die zugehörigen Warnungen. Die Lösung sollte sein die 
stdint.h mit reinzuholen.

von modul (Gast)


Lesenswert?

:) Ok super danke es funktioniert! Aber ich hab leider keine Warnung 
erhalten...
Es sieht jetzt so aus:
1
#include <avr/io.h>
2
#include <stdint.h>
3
#include "pins.h"
4
5
int main(void)
6
{
7
  set_low(0, DDRD, PORTD);
8
    while(1)
9
    {
10
        //TODO:: Please write your application code 
11
    }
12
}
und:
1
#include <stdint.h>
2
3
4
#ifndef PINS_H_
5
#define PINS_H_
6
7
void set_hight(uint8_t pin, uint8_t ddr, uint8_t port);
8
void set_low(uint8_t pin, uint8_t ddr, uint8_t port);
9
10
#endif
Die andere Datei hab ich nicht veränder...
Wird aber nicht jetzt stdint.h doppelt inkludiert?

von g457 (Gast)


Lesenswert?

> Aber ich hab leider keine Warnung erhalten...

Stimmt, hier auch nicht (mehr?). War mir sicher da kommt ein 'warning: 
unknown "uint8_t" .. assuming something something' davor..

> Wird aber nicht jetzt stdint.h doppelt inkludiert?

Jein. Normalerweise(tm) macht man sich keine Sorgen wegen doppelter 
Includes, die sind eh adäquat ∗abgesichert∗ (d.h. 'Ja, wird doppelt 
eingebunden' und 'Nein, es entstehen daraus keine Probleme').

Saubererweise holt sich ∗jeder∗ ∗alle∗ Header rein, die ∗er∗ braucht, 
nicht mehr und nicht weniger. So gesehen braucht obige main die stdint.h 
(noch) nicht.

Unabhängig vom obigen Problem: Überlegs Dir nochmals genau, ob Du 
set_[high,low] wirklich als Funktionen implementieren willst oder nicht 
doch als Präprozessormakros.

HTH und nix für ungut

von modul (Gast)


Lesenswert?

Ok danke für die Erklärung!
Habs jetzt über Makros gemacht :)

von Floh (Gast)


Lesenswert?

modul schrieb:
> port = port && !(1<<pin);

Wäre sowieso falsch.
Check mal dein Makro, ob derselbe logische Fehler drin ist.
Du benötigst hier bitweises oder und bitweises negieren.

port = port & ~(1<<pin);

von modul (Gast)


Lesenswert?

ja hab ich auch bemerkt... trotzdem danke!

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.