Solar Log Forum
21.05.2012 01:26 *
Willkommen Gast. Bitte einloggen oder registrieren.

Einloggen mit Benutzername, Passwort und Sitzungslänge
News: Forum auf Grund des Spamaufkommens auf manuelle Aktivierung neuer Benutzeraccounts umgestellt.
 
   Übersicht   Hilfe Suche Einloggen Registrieren  
Seiten: [1]   Nach unten
  Drucken  
Autor Thema: yasdi cross compile mit -Os  (Gelesen 772 mal)
mbarchfe
Mitglieder
Neuling
*
Offline Offline

Beiträge: 11


Profil anzeigen
« am: 12.12.2009 13:58 »

Hallo,

Ich habe eine Frage, die die yasdi Bibliothek betrifft. Ich hoffe mal, dass das hier im Forum OK ist. Auf der SMA Seite selbst habe ich keinen passenden Ort für meine Frage gefunden. Immerhin weiss ich hier, dass Heiko ggf antworten wird.

Also: ich hatte auf der FritzBox den Effekt, dass die mit GetChannelValue ermitteleten Kanalwerte immer 0.0 geliefert haben, obwohl im yasdi.log korrekte Werte geloggt wurden. Mit dem Simulator unter Linux (ubuntu hardy) war alles OK. Ich habe dann von yasdi 1.7.2 auf 1.8.0 umgestellt, aber der Fehler auf der Box blieb.

Mit ein bisschen Debugging habe ich herausgefunden, dass der Gain fälschlich als 0.0 bestimmt wurde. Letzlich bin ich dann in byteorder.c angelangt:

float le32fToHost( BYTE * src )
{
   DWORD v = le32ToHost(src);
   return *(float*)&v;
}

le32fToHost liefert immer 0.0, wenn mit Platzoptimierung (-Os) kompiliert wird. Mein compiler ist der mipsel-gcc wie er von freetz geholt wird:

$ /home/ubuntu/freetz/toolchain/target/bin/mipsel-linux-uclibc-gcc -v
Using built-in specs.
Target: mipsel-linux-uclibc
Configured with: /home/oliver/fritz/ds26-14/trunk/source/toolchain/target/gcc-4.2.1/configure --prefix=/home/oliver/fritz/ds26-14/trunk/toolchain/build/gcc-4.2.1-uClibc-0.9.28/mipsel-linux-uclibc --build=i386-pc-linux-gnu --host=i386-pc-linux-gnu --target=mipsel-linux-uclibc --enable-languages=c,c++ --disable-__cxa_atexit --enable-target-optspace --with-gnu-ld --disable-libmudflap --enable-shared --disable-nls --enable-sjlj-exceptions --with-float=soft --enable-cxx-flags=-msoft-float
Thread model: posix
gcc version 4.2.1

Ich habe yasdi nach Anleitung mit cmake installiert und für das cross-compile die Umgebungsvariablen gesetzt:
export CC=/home/ubuntu/freetz/toolchain/target/bin/mipsel-linux-uclibc-gcc
export CFLAGS="-Os -pipe -march=4kc -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
export LDFLAGS=""

Die CFLAGS habe ich dabei von freetz übernommen. Jetzt ist meine Frage, wo eigentlich das Problem ist:

* Ist es ein Bug im gcc?
* Sollte der Code an der Stelle umgeschrieben werden?
* Muss das "-Os" Flag unterdrückt werden?

Danke für Hinweise
Markus
Gespeichert
Klaus D.
Globaler Moderator
Sr. Mitglied
*****
Offline Offline

Beiträge: 305

229942439
Profil anzeigen WWW
« Antworten #1 am: 13.12.2009 06:37 »

Hallo Markus,

sogern ich dir helfen würde, nur leider geht das über mein Wissen hinaus.

Eventuell Heiko mal ne PM schicken. Denn er schaut denke ich nicht jeden Tag vorbei.


mfg

Klaus D.
Gespeichert

vigeland
Mitglieder
Neuling
*
Offline Offline

Beiträge: 25


Profil anzeigen
« Antworten #2 am: 14.12.2009 15:41 »

Hallo,

Versuche mal, oder ist v schon null, du hast kein 64 Bit System ?

float le32fToHost( BYTE * src )
{
   DWORD v = le32ToHost(src);
   float f=v;
  // ggf. float f=(fload)v;
   return f;
}

Gruß
Gespeichert
mbarchfe
Mitglieder
Neuling
*
Offline Offline

Beiträge: 11


Profil anzeigen
« Antworten #3 am: 16.12.2009 22:24 »

Danke für den Hinweis. Ich werde es am Wochenende mal ausprobieren.
Markus
Gespeichert
mbarchfe
Mitglieder
Neuling
*
Offline Offline

Beiträge: 11


Profil anzeigen
« Antworten #4 am: 01.01.2010 17:12 »

Hallo,

Ich bin bei der Sache nicht weitergekommen. Wenn ich jetzt den -Os Schalter setze, haben alle gebauten Bibliotheken die Länge 0.

Gruß
Markus
Gespeichert
Seiten: [1]   Nach oben
  Drucken  
 
Gehe zu:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2009, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS