mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage zu C


Autor: SuperGrobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: SuperGrobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin #### (martin-)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: SuperGrobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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..

??

Autor: Martin #### (martin-)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <avr/pgmspace.h>

bla.bla...
//Array im Flash
const int tabelle[256] PROGMEM = {24,42,51,58,42,10
                                  12,43,32,10,51,24
                                     ..........    };
//kopieren
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-Tu...

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.