mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Pointer auf Struct und Textausgabe


Autor: LightCo (Gast)
Datum:

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

Autor: Rüdiger Knörig (sleipnir)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
typedef struct {
    INT8U ZAHL;
    INT8U NAME[128];
    INT8U DESCRIPTION[128];
    INT8U TYPE[128];
} flash;

flash *ptr;

ptr = (flash*) 0x00070000;

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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

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.