Hallo, ich benutze den LPC2138 µP und habe folgendes Problem: Ich möchte einen Text aus der Struktur auslesen und weiß nicht wie: Ich habe eine Struktur: typedef struct { INT8U ZAHL; INT8U NAME[128]; INT8U DESCRIPTION[128]; INT8U TYPE[128]; }flash; einen Pointer auf diese flash *ptr; dann noch eine Adresszuweisung der Struktur auf eine Adresse imm internen Flash ptr = (flash*) 0x00070000; wenn ich aus dem Flash dann lesen möchte: i= flash->ZAHL; alles OK ich habe ein Problem damit das array auszuwerten in dem ein Tex´t steht. Was muß ich beachtet? kann mir da jemand helfen?
Was sind denn das für Probleme? Nimmt der Compiler flash.name nicht für Zeichenkettenverarbeitende Routinen an? Dann versuch doch statt UINT8 den Datentyp char zu verwenden! Oder Du mußt a) die Zeichenketten als Union definieren struct { union { char s[128]; UINT8 i[128]; }name; }flash; oder b) einen Typcast machen: (char *) &flash.name[0] Beachte auch das die meisten zeichenkettenverarbeitenden Routinen in C 0-terminierte Zeichenketten erwarten! (D.h. letzter Wert muß 0 sein!)
LightCo wrote: Wie ist das beim LPC2138? Hat der eine Harvard Architektur? > wenn ich aus dem Flash dann lesen möchte: > i= flash->ZAHL; alles OK > ich habe ein Problem damit das array auszuwerten in dem ein Tex´t steht. > Was hast du probiert? > Was muß ich beachtet? kann mir da jemand helfen? Vermutung: Ich könnte mir vorstellen, dass ein normales strcpy() nicht dafür ausgelegt ist, die Zeichen aus dem Flash Speicher zu holen.
Der ARM7TDMI im LPC2138 hat eine von-Neumann-Architektur; bei Lesezugriffen auf das Flashrom ist exakt genauso zu verfahren wie bei Zugriffen auf das RAM. Mit einem Typecast sollte das Problem lösbar sein:
1 | typedef struct { |
2 | INT8U ZAHL; |
3 | INT8U NAME[128]; |
4 | INT8U DESCRIPTION[128]; |
5 | INT8U TYPE[128]; |
6 | } flash; |
7 | |
8 | flash *ptr; |
9 | |
10 | ptr = (flash*) 0x00070000; |
11 | |
12 | printf("%s\n", (char *) (ptr->NAME)); |
(anstelle von printf ist die gewünschte Stringoperation zu wählen). > wenn ich aus dem Flash dann lesen möchte: > i= flash->ZAHL; alles OK Das ist es unter Garantie nicht, i = ptr->ZAHL; funktioniert. "flash" ist keine Variable, sondern ein Datentyp. Aber ich vermute, daß Du Dich eh nur vertippt haben wirst. [Nachtrag] An der Adresse 0x70000 liegt auch Flashrom? Mit sinnvollem Inhalt?
Rufus t. Firefly wrote: > Der ARM7TDMI im LPC2138 hat eine von-Neumann-Architektur; bei > Lesezugriffen auf das Flashrom ist exakt genauso zu verfahren wie bei > Zugriffen auf das RAM. Ah. OK. > > Mit einem Typecast sollte das Problem lösbar sein: > > [c]typedef struct { > INT8U ZAHL; > INT8U NAME[128]; > INT8U DESCRIPTION[128]; > INT8U TYPE[128]; > } flash; Wobei ich mich sowieso frage, aus welchem Grund ich ein String-Array als INT8U[] (was immer das auch sein mag) definieren sollte und nicht einfach als char[].
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.