Probleme mit C

OP #2229354
Lesenswert?

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
OP #2229363
Lesenswert?

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 ;)
Gast #2229376
Lesenswert?

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])
Gast #2229381
Lesenswert?

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.
Gast #2229396
Lesenswert?

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.
#2229414
Lesenswert?

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?
#2229527
Lesenswert?

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
}

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