Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage zu C


von SuperGrobi (Gast)


Lesenswert?

Hallo,

ich hänge da schon wieder an einem Problem:

wie kann ich in C einem Array mehrere Werte auf einmal übergeben ?
Also ich kann ja z.B. ein Array erstellen mit

int test[3] = {1,2,3]

wenn ich jetzt aus 1,2,3 jedoch 4,7,2 machen möchte müsste ich dann

test[0] = 4;
test[1] = 7;
test[2] = 2;

schreiben...
geht das auch anders ? So wie beim initialisieren...

test = {4,7,2};

da meckert der Compiler leider...
vielleicht könnt ihr mir helfen ?

danke schon mal
gruß
Thomas

von Christian (Gast)


Lesenswert?

Hallo,

ich würde die übergabe entweder dynamisch über Variablen praktizieren
(also wenn du zB. den Wert errechnest etc.) oder wenn möglich das ganze
in eine For-Schleife zu packen.
Direkte mehrfach übergaben sind nicht möglich.

Vielleicht können wir dir besser helfen, wenn du angibst was für Werte
du die in Felder übergeben willst und wo sie her kommen.

Gruß Christian

von SuperGrobi (Gast)


Lesenswert?

diese Werte sind leider nicht berechnet, sondern so was ähnliches wie
ASCII Code. Da wird es mit einer for-Schleife ziemlich schwierig bzw.
zu aufwendig.
Ich möchte jeweils 16 Zeichen an ein Display übergeben.

Das wird so eine Art Bedienerführung. Wenn Taste 1 gedrückt soll auf
dem Display "Uhrzeit: ..." erscheinen und beim nächsten drücken z.B.
"Temperatur" usw.
Die Zeichen sind jedoch kein ASCII Code, sondern selbsterstellte. Also
A=11, B=12, C=13,... Nun wäre es schön, wenn man für das Wort "Menue"
einfach Display = {24,42,51,58,42,10}; schreiben könnte (10 ist ein
Leerzeichen).

Hoffe ich konnte das so einigermassen verständlich rüberbringen.

gruß
Thomas

von Martin #. (martin-)


Lesenswert?

Könntest du es nicht einfach mit memcpy(..) aus einem Array in das andre
Daten kopieren. Du müsstest nur berücksichtigen wie gross ein Feld ist.

int 2Byte ?

von SuperGrobi (Gast)


Lesenswert?

hmm das versteh ich nicht...

das array "Display" bleibt doch bestehen... also wenn ich z.B.
"Menue 1", "Menue 2", ... usw. anzeigen lassen will, ist klar,
brauch ich nur die Zahl ändern.
Oder sollte ich mir für die versch. Anzeigen Arrays als Const
definieren ? hmm dann brauch ich aber kein memcpy mehr..

??

von Martin #. (martin-)


Lesenswert?

So wie ich es verstanden habe, sind diese Zahlenfolgen, die du auf
einmal übergeben willst vordefiniert.
Wenn das so ist, kann man diese Zahlenfolgen in einem einzigen Array
speichern, und dann einfach aus diesem Array in das "text"-Array
kopieren, so etwa:
1
#include <avr/pgmspace.h>
2
3
bla.bla...
4
//Array im Flash
5
const int tabelle[256] PROGMEM = {24,42,51,58,42,10
6
                                  12,43,32,10,51,24
7
                                     ..........    };
8
//kopieren
9
memcpy_P (text, tabele, laenge);


Das was du hier versucht hast,und was nicht geht:
>Display = {24,42,51,58,42,10};
richtig:
dislpay[0]=24;
.....
dislpay[n]=xx;
ist auch im prinzip nichts anderes als aus einem Speicherbereich in das
Andere Daten zu kopieren (hier aus Flash ins SRAM).
Darüber hinaus denke ich das in deinem Fall besser als int wäre
unsigned char, du wirst ja keinen negativen Zahlen oder über 255
benutzen, oder ?

Ansonsten lese noch einmal Abschnitt "Programmspeicher" im
AVR-GCC-Tutorial:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29

Und in avr-libc doku, Abschnitt "Modules->Program Space String
Utilities":
http://www.nongnu.org/avr-libc/user-manual/

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.