Verständnisfrage zu C

Gast #228351
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
Gast #228352
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
Gast #228353
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
Gast #228355
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..

??
#228356
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/

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