www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Softune Problem beim Datenzugriff über einen Struct


Autor: Matthias Krause (mohv)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag

Erstmal vielen Dank an alle die hier immer so viele nützliche Beiträge 
posten. Ich suche schon seit Jahren immer in diesem Forum wenn ich nicht 
weiter komme. Leider habe ich diesemal keine Lösung gefunden.

Also mein Problem ist das ich versuche eine Software die ich mal vor 
Jahren auf einem AVR geschrieben habe auf einem Fujitsu MB96F326 zum 
laufen bringen will. Jedoch ist der Softune Workbench lange nicht so gut 
wie das WINAVR.

So nun zu meinem Problem:

Wenn ich versuche über eine Struct auf eine Speicherbereich zuzugreifen 
kommt es dazu das einzelne Bytes übersprungen werden. Es sieht so aus 
als ob Softune nicht in der Lage ist bei 16Bit variablen auf ungerade 
Speicherbereiche zuzugreifen und dann immer ein Byte überspringt. Im 
anhang ist eine Testfunktion mit dem endsprechenden ausgaben.

Wenn jemand eine Idee hat wäre ich sehr dankbar.

Gruß Matthias

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

Bewertung
0 lesenswert
nicht lesenswert
Matthias Krause schrieb:

> So nun zu meinem Problem:
>
> Wenn ich versuche über eine Struct auf eine Speicherbereich zuzugreifen
> kommt es dazu das einzelne Bytes übersprungen werden.


  unsigned char SDKartenDaten[16] = {  0x00, 0x11, 0x22, 0x33,
                    0x44, 0x55, 0x66, 0x77,
                    0x88, 0x99,  0xAA, 0xBB,
                    0xCC, 0xDD, 0xEE, 0xFF};

  struct StructTest
  {
    char    sc_1;  // 1
    unsigned int  ui_2;  // 3
    unsigned char  uc_3;  // 4
    char    sc_4;  // 5
    unsigned int  ui_5;  // 7
    int    si_6;  // 9
    unsigned char  uc_7;  //10
    unsigned int  ui_8;  //12
    int    si_9;  //14
    unsigned char  uc_10;  //15
    unsigned char  uc_11;  //16
  };

  struct StructTest *StTest;
  StTest=(struct StructTest *)SDKartenDaten;


Autsch

> Es sieht so aus
> als ob Softune nicht in der Lage ist bei 16Bit variablen auf ungerade
> Speicherbereiche zuzugreifen und dann immer ein Byte überspringt.

Dein Compiler hat zwischen die Member an manchen Stellen sog. Padding 
Bytes eingefügt um alle Member (vermutlich) auf eine gerade Startadresse 
zu bekommen. Bei einigen Prozessoren ist es so, dass man auf Worte an 
geraden Adressen schneller zugreifen kann, als an ungeraden Adressen. 
Daher sieht der Compiler zu, dass er eine Struktur so auslegt, dass auf 
alle Member schnell zugegriffen werden kann.

> Wenn jemand eine Idee hat wäre ich sehr dankbar.

Doku nachlesen, ob überhaupt und wenn ja wie, du für eine Struktur das 
Padding abschalten kannst.
Meist sind das irgendwelche speziellen Schlüsselworte im Zusammenhang 
mit struct. Manchmal ist es auch ein #pragma mit welchem man hier zum 
Zug kommt.

Autor: Matthias Krause (mohv)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Vielen Dank. Ich habe mal etwas getestet und du hast recht. Des size des 
Struct sollte ja eigentlich 16 sein. Er ist aber 18. Somit ist klar das 
da noch zwei Padding Bytes hinzugefügt wurden.

Nur leider finde ich nichts dazu wie man das Padding bei Softune 
deaktivieren kann. Hat das vieleicht schon mal irgendjemand gemacht?

Gruß Matthias

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Nur leider finde ich nichts dazu wie man das Padding bei Softune
>deaktivieren kann. Hat das vieleicht schon mal irgendjemand gemacht?

Steht bestimmt im Handbuch.

Oder sortier deinen Scheiß doch mal anders

  struct StructTest
  {
    unsigned int  ui_2;  // 3
    unsigned int  ui_5;  // 7
    int    si_6;  // 9
    unsigned int  ui_8;  //12
    int    si_9;  //14
    char    sc_1;  // 1
    unsigned char  uc_3;  // 4
    char    sc_4;  // 5
    unsigned char  uc_7;  //10
    unsigned char  uc_10;  //15
    unsigned char  uc_11;  //16
  };

Autor: Matthias Krause (mohv)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Das mit dem Handbuch ist Bei Fujitsu so eine Sache für sich. Na ja ich 
werde mal suchen und wenn ich was finde werde ich es auch hier rein 
schreiben.

Die Idee mit dem anders sortieren ist super. Leider ist das ja nur ein 
Testprogram. Meine eigentlichen Anwendung ist es ein SD Karte mit einem 
Fat Datensystem auf dem Fujitsu zu implementieren. Leider kann ich mir 
nicht aussuchen wie die Daten im MBR auf der SD Karte abgelegt sind.

An ja wenn ich keine Lösung finde muss ich wohl die gesammten Funktionen 
umschreiben. Das wollte ich jedoch geren umgehen.

Gruß Matthias

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

Bewertung
0 lesenswert
nicht lesenswert
Matthias Krause schrieb:

> An ja wenn ich keine Lösung finde muss ich wohl die gesammten Funktionen
> umschreiben. Das wollte ich jedoch geren umgehen.

Schreib sie um.
Das mit der "Struktur über die Daten legen" ist eh nicht so der 
Bringern.

Autor: Rene Schube (Firma: BfEHS) (rschube)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:

> Schreib sie um.
> Das mit der "Struktur über die Daten legen" ist eh nicht so der
> Bringern.

Hallo, diese Erfahrungen habe ich auch gemacht. Ich arbeite mit MB90F334 
(16bit) und MB91F467 (32bit) bei mit Softtune. Hab es mit "dummys" 
zwischen den einzelnen Werten hingebogen. Es funktioniert aber 'schön' 
ist was anderes. Was wäre denn die Alternative?

mfg Rene

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.