mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Array Index aus Variable


Autor: Randolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo leute, ich verstehe momentan gar nix mehr.
uint8_t nr = keyNrRecieve[1];
uart_putc(nr); // Ausgabe 1;
uint8_t *p = Key[nr]; // <-- hier das Problem
uart_putsN(p,10);

Wenn ich nr in Key als konstante übergebe dann funzt alles(ZB. Key[1]).
Wenn ich es aber Index über nr übergebe bekomme ich nur Müll raus.

danke Randolf

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Randolf schrieb:
> Wenn ich es aber Index über nr übergebe

Wenn ich das richtig sehe, dann versteht kein C-Programmierer was Du 
damit sagen willst.

in dem Ausdruck
uint8_t *p = Key[nr];

ist "nr" der Index in ein Array.

Verstehe ich dich recht, das es nicht funktioniert, wenn Du eine andere 
Variable (welche ?) als Index verwendest?

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aaah. Ich glaube ich ahne was.

Willst Du sagen, dass, wenn Du
uint8_t nr = keyNrRecieve[1];

ausführen lässt der Ausdruck
uint8_t *p = Key[nr];

nicht mehr "funktioniert"?

Falls Du das meinst, dann poste doch mal den Code. Vor allem die 
Deklaration von Key. Ganz naiv würde ich vermuten, das der Inhalt von 
Key kein gültiger Index in keyNrRecieve ist (Das schreibt man übrigens 
"Receive").

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grrrr schrieb:
> Vor allem die
> Deklaration von Key.

Und natürlich die Initialisierung von Key und keyNrRecieve.

Autor: Wolfgang Bengfort (et-tutorials) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> uint8_t *p = Key[nr]; // <-- hier das Problem

p ist ein Zeiger, der auf eine Speicherstelle der Größe uint8_t 
verweist.

Funktioniert vielleicht

uint8_t *p;
p = Key;

?

Ist Key ein Array mit uint8_t?

Autor: Randolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe die Vorschläge ausprobiert leider klappt immer noch nicht.
uint8_t keyNrRecieve[3];
uint8_t Key [3][11]={"0123456789",                   "ABCDEFGHIJ",                   "KLMNOPQRST"};
rf12_rxdata(&keyNrRecieve,3); //Empfang von #1@
uart_puts("Nr empfangen:");
uart_putsN(&keyNrRecieve[1],1);//Ausgabe: 1
uint8_t nr = keyNrRecieve[1]; 
uart_putc(nr); // Ausgabe : 1
uint8_t *p = Key[nr];
uart_putsN(p,10); // Ausgabe Müll wenn nr benutzt wird.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was steht denn konkret in keyNrRecieve[1] drin? 1 oder '1'?
Jede Wette, dass es letzteres ist.

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau:

Was wird da
rf12_rxdata(&keyNrRecieve,3); //Empfang von #1@

empfangen?

Falls Du die gesendeten Daten
als binäre Zahlen interpretierst, schreibe 0byyyyyyyy, wobei y = 0 oder 
1;
falls hexadezimale Zahlen, schreibe 0xyy mit y = 0-9, a-f bz.w A-F,
falls ASCII Zeichen, schreibe 'y' wobei y jedes druckbare Zeichen sein 
darf.

Autor: Marko B. (glagnar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Stefan:

aendere mal

uint8_t *p = Key[nr];

in

uint8_t *p = Key[nr-'0'];

Autor: Randolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die methode deklaration ist  rf12_rxdata(unsigned char *data, unsigned 
char number). Habe grade auch
unsigned char keyNrRecieve[3];
uint8_t nr = (uint8_t)keyNrRecieve[1];
probiert geht aber auch nicht. Blicke echt nicht mehr durch:)

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Randolf schrieb:
> Blicke echt nicht mehr durch

Grrrr schrieb:
> Was wird da
> rf12_rxdata(&keyNrRecieve,3); //Empfang von #1@
>
> empfangen?
>
> Falls Du die gesendeten Daten
> als binäre Zahlen interpretierst, schreibe 0byyyyyyyy, wobei y = 0 oder
> 1;
> falls hexadezimale Zahlen, schreibe 0xyy mit y = 0-9, a-f bz.w A-F,
> falls ASCII Zeichen, schreibe 'y' wobei y jedes druckbare Zeichen sein
> darf.

Autor: Randolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
uint8_t *p = Key[nr-'0']; Hat funktioniert. Sorry habe vergessen das ich 
ein String versende. UPs

Vielen Dank Leute

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.