Servus Leute, ich hab mal wieder Probleme mit C. In einer .h Datei ist eine i2c Routine implementiert mit folgenden Übergabewerten: i2csendedaten(unsigned char addresse, unsigned char* daten) Nun möchte ich diese Funktion nutzen und folgende daten Übergeben: #define adresse 0xE0 unsigned char commands[3]={0x00,0xA1,0x02}; int main() { ... for(int i=0;i<=2;i++) { i2csendedaten(addresse, commands[i]) } ... } kann ich das so machen? Danke für eure Beiträge
Tim S. schrieb: > #define adresse 0xE0 kann man so machen, aber ich wuerd defines in grossbuchstaben schreiben
Tim S. schrieb: > > #define adresse 0xE0 ^^ > i2csendedaten(addresse, commands[i]) ^^ korrigiere das noch
Also es ging mir eigentlich um den 2. Übergabewert i2csendedaten(addresse, commands[i]) kann ich durch das array iterieren? Da diese Routine folgende Werte benötigt: i2csendedaten(unsigned char addresse, unsigned char* daten) ^ | | | Das soll ein Pfeil sein ;)
So wie es geschrieben ist, wird es Unsinn tun. Der zweite Parameter muss ein Zeiger sein (deshalb das * in der Funktionsdefinition). Lösbar z.B. durch: i2csendedaten(addresse, &commands[i])
Tim S. schrieb: > Also es ging mir eigentlich um den 2. Übergabewert > > i2csendedaten(addresse, commands[i]) > > kann ich durch das array iterieren? Warum solltest du das nicht können? Ich würde statt: > for(int i=0;i<=2;i++) aber schreiben:
1 | for(int i=0;i<3;i++) |
Das entspricht eher der in C üblichen Schreibweise. Der erfahrene C-Programmierer sieht dort schon aus dem Augenwinkel heraus, daß durch die ersten drei Elemente iteriert wird. Bei deiner Variante muß er erst kurz nachdenken, weil sie ungewohnt aussieht.
Vorsicht: commands[i] ist ein WERT weil der "[]" Operator verwendet wurde. commands alleine wäre ein Zeiger. Im Prinzip müsste auch "commands+i" funktionieren um einen Zeiger auf das i-te Objekt zu bekommen. So wie es geschrieben ist, würde der Wert in commands[i] als Zeiger auf eine Stelle im Speicher verstanden werden, in der das Kommando liegt. Das dies das gewünschte Ergebnis liefert wäre allerdings reiner Zufall.
Ist das i2csendedaten() von dir oder von irgendwo übernommen? So wie du es beschreibst, übergibst du immer nur je ein Zeichen. Wenn i2csendedaten() aber nur ein Zeichen erwartet, ist es ziemlich ungewöhnlich, den über einen Zeiger zu übergeben. Kann es nicht sein, daß die Funktion einen String erwartet?
Nur so zur Info Beitrag "Datenformat i2c Routine" Hast du diesmal auch vergessen so beiläufig zu erwähnen, dass die Funktion i2csendedaten ebenfalls 3 Parameter nimmt, von denen der 3.te die Längenangabe ist? Denn: wie Klaus schon sagte - deine Funktionssignatur ist ungewöhnlich. Dann reduziert sich dein Beispiel zu
1 | #define ADRESSE 0xE0
|
2 | unsigned char commands[] = {0x00,0xA1,0x02}; |
3 | |
4 | |
5 | int main() |
6 | {
|
7 | ...
|
8 | i2csendedaten( ADRESSE, commands, sizeof( commands ) ); |
9 | ...
|
10 | }
|
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.