Folgendes Problem:
Ich habe ein Struct für 3 Messwerte (x,y,z) in adxl345.h deklariert. In
main.c erstelle ich einen Zeiger auf einen solchen Typ und übergebe
diesen an die Funktion get_acc_adxl345(&adxl345_messwert). Diese
Funktion befindet sich in adxl345.c und ist der main.c auch bekannt über
die eingebundene Headerdatei.
Compilerfehler:
expected '=', ',', ';', 'asm' or '__attribute__' before
'adxl345_messwert' ADXL345.h (Zeile: extern adxl345 adxl345_messwert)
expected ')' before '*' token ADXL345.h (Zeile: extern void
get_acc_adxl345(adxl345 *)
expected ')' before '*' token ADXL345.c (Zeile: void
get_acc_adxl345(adxl345 *messwert)
[c]
//main.c
#include <ADXL345.h>
volatile adxl345 *adxl345_messwert;
...
void main()
{
...
get_acc_adxl345(&adxl345_messwert);
...
}
//adxl345.h
#include <inttypes.h>
typedef struct adxl345{
uint8_t x;
uint8_t y;
uint8_t z;
};
extern adxl345 adxl345_messwert;
extern void get_acc_adxl345(adxl345 *);
//adxl345.c
#include <ADXL345.h>
void get_acc_adxl345(adxl345 *messwert)
{
...
messwert->x = (((int)_buff[1]) << 8) | _buff[0];
messwert->y = (((int)_buff[3]) << 8) | _buff[2];
messwert->z = (((int)_buff[5]) << 8) | _buff[4];
}
[\c]
Danke im Vorraus!
Lies nochmal in deinem C-Buch die Syntax zu typedef struct nach - da stimmt was nicht. Oliver
Das war das erste was ich gemacht habe.
typedef struct adxl345{
uint8_t x;
uint8_t y;
uint8_t z;
};
Deklariert neuen Typ adxl345.
Definition des Typs dann in der main.c
Oder liege ich da falsch?
Andreas schrieb: > Deklariert neuen Typ adxl345. Nein. Ein C-Statement wie typedef struct S { ... }; ist identisch mit struct S { ... }; und definiert zwar eine struct, aber keinen Typnamen (weil leer). Im Grund ist das sowas wie typedef int; und das ist zwar zulässig, aber sinnlos.
Andreas schrieb: > typedef struct adxl345{ > uint8_t x; > uint8_t y; > uint8_t z; > }; muss glaub ich so heißen: typedef struct struct_adxl345{ uint8_t x; uint8_t y; uint8_t z; } adxl345; "struct_adxl345" kann auch weggelassen werden.
Jedoch gibt es immer noch Probleme bei dem Funktionsaufruf...
Ok Problem gelöst: extern adxl345 adxl345_messwert; Ist Unsinn in der adxl345.h Danke!
Genau und natürlich keinen Zeiger anlegen!
Es würde mich übrigens auch interessieren, wie du zweimal 8 Bits in eine 8-Bit Variable zu quetschen gedachtest.
Andreas schrieb: > get_acc_adxl345(&adxl345_messwert); Und mich würd interessieren, warum Du die Adresse des Zeigers übergeben willst und nicht den Inhalt des Zeigers...
ADXL345 ist ein Accelerometer. Ich will mit der Funktion get_acc_adxl345(&adxl345_messwert); die Messwerte des Sensors erhalten. Dachte mir das ist die beste Möglichkeit oder irre ich mich da? D.h. ich übergebe der Funktion den Zeiger und die Funktion schreibt die Werte. Gibt es eine bessere/ geschicktere Möglichkeit? Projekt: Sensorboard mit Gyro und Acc (RoboBee 6 DOF), zum Einstieg in die µC Programmierung
Andreas schrieb: > ADXL345 ist ein Accelerometer Genau deswegen habe ich gefragt. Hatte kurz danach gegoogelt.. Dachte dann, dass du evtl. etwas für den Modellbau oder sowas machst. Hast du dann noch irgendwas konkretes damit vor? Hast du einen LCD zum Darstellen der Werte? Andreas schrieb: > Gibt es eine bessere/ geschicktere Möglichkeit? Kann man meiner Meinung nach schon so machen...
In ferner Zukunft will ich damit einen einachsigen Roboter Regeln. (Inverses Pendel). Wäre aber auch sicherlich für einen Quadrokopter o.ä. interessant, bzw. Segway Klon... Mal schauen was die zukunft bringt und wie groß das Budget ist.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.