Array auf PIN Register schieben

Gast #2919789
Lesenswert?

Hallo,

ich hab einen bool Array der 15 Elemente hat und jetzt möchte ich das 
Element 0-7 auf PINB geschoben wird und Element 8-15 auf PINC.

also
1
bool testArray [15]
2

3
int main(void)
4
{
5
 PINB = testArray[0],testArray[1],testArray[2],...
6
 PINC = testArray[8],testArray[9],testArray[10],...
7
}

Tim
Gast #2919802
Lesenswert?

Schön.

Warum nimmst du bool Arrays? Ein Bitmuster auf PIN geht doch auch und 
ist nichts anderes als dein bool Array nur zusammengesetzt.

Falls du da AVRs nutzt solltest du anstatt PINx lieber PORTx benutzen 
falls du das auf einem Port ausgeben willst.
Gast #2919850
Lesenswert?

Danke für die schnelle Antwort

mr. mo schrieb:
> Falls du da AVRs nutzt solltest du anstatt PINx lieber PORTx benutzen
>
> falls du das auf einem Port ausgeben willst.
Hab ich gemacht :D

mr. mo schrieb:
> Warum nimmst du bool Arrays? Ein Bitmuster auf PIN geht doch auch und
>
> ist nichts anderes als dein bool Array nur zusammengesetzt.
Weil ich sonst später bei der USB-Übertragung Probleme bekomme.

Hmm schrieb:
> Mach doch!

Ja, hab ich gemacht aber er setzt nur Bit0 die restlichen Bits ignoriert 
er!?
#2919882
Lesenswert?

Hallo,

wenn man das Problem wirklich so angehen will, wie wäre es mit etwas in 
der Art:
1
PORTB = (array[0]<<0) | (array[1]<<1) | (array[2]<<2) | (array[3] << 3) |
2
        (array[4]<<4) | (array[5]<<5) | (array[6]<<6) | (array[7] << 7);

Wie das für PORTC aussieht, darfst Du Dir selbst ausdenken :-)

Für ein eigenes Programm würde ich mir das in eine Funktion packen, die 
einen Teil des Arrays in ein Byte packt und zurück gibt:
1
uint8_t array_range_to_byte(bool* array, size_t at_index);

Man müsste noch Fehlerbehandlung und Plausibilitätsprüfung betrachten: 
Liegt at_index im Array? Was passiert, wenn ab at_index weniger als 8 
Elemente vorhanden sind? Akzeptiert die Funktion besser nur Vielfache 
von 8 (minus 1) als Index? Wie erhält der Aufrufer einen Fehler 
rückgemeldet? Der Rückgabewert der Funktion ist ja schon in Benutzung . 
Hmm, würde doch noch ein wenig anders aussehen ;-) Aber mal als Ansatz, 
wenn das oben mal funktioniert...

Ansonsten schließe ich mich meinen Vorrednern an:

Walter S. schrieb:
> Ich empfehle ein C-Buch um Grundlagen zu lernen

mr. mo schrieb:
> Warum nimmst du bool Arrays?


Viele Grüsse,
Dirk
Gast #2919885
Lesenswert?

Tim schrieb:
> mr. mo schrieb:
>> Warum nimmst du bool Arrays? Ein Bitmuster auf PIN geht doch auch und
>>
>> ist nichts anderes als dein bool Array nur zusammengesetzt.
> Weil ich sonst später bei der USB-Übertragung Probleme bekomme.

Ich verstehe nicht den Zusammenhang zwischen einem bool-Array und einer 
USB-Übertragung.
Außerdem hat dieses Array natürlich einen recht großen Overhead.

> Hmm schrieb:
>> Mach doch!
>
> Ja, hab ich gemacht aber er setzt nur Bit0 die restlichen Bits ignoriert
> er!?

Ein bool hat ja auch nur ein genutztes Bit, und der Komma-Operator macht 
was völlig anderes, als du denkst.

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