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
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.
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
>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 };
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
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.
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
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.