Hallo, ich habe folgendes deklariert: char str[]={'T','e','s','t','1','2','3','4'}; Was ich zur Zeit nicht verstehe ist, das ich das deklarierte Array im Speicher folgendermaßen wiederfinde: 't','s','e','T','4','3','2','1' In dieser Reihenfolgen werden auch die Zeiche ausgegeben wenn ich folgendes aufrufe (ist hier nur ein Bsp.): char* p = str; for (i = 0; i < 8; i++) { my_putc(*p); p++; } Ich kann nicht verstehen, warum bei einer Deklaration eines char-Array's hier wahrscheinlich das Endian-Format eine Rolle spielt. Weiß jemand Rat? Karsten
Danke für deine Antwort. Das ist nicht der Fall. Ich habe wahrscheinlich das Problem gefunden. Wie ich jetzt feststelle, habe ich euch leider zu wenig Info's gegeben. Tschuldigung! Der Prozessor für den ich entwickle, ist der TMS470 von TI. Dieser Prozessor benötigt das Big-Endian-Format und die WinARM-Toolchain ist laut Info aus einem anderen Forum für das Little-Endian-Format ausgelegt. Die Kompilierung des Codes im Little-Endian Format erzeugt genau dieses Swapping. Der nächste Schritt ist festzustellen, ob WinARM wirklich nur das Little-Endian-Format unterstützt. Oder ob z.B. das Hinzufügen der Option -mbig-endian zu dem gcc-Aufruf genügt. Andernfalls ist eine eigene Tool-Chain aufzusetzen. "Ich freue mich schon drauf!" :-( Karsten
Guck doch mal, was dein Compiler für machine-specific options kennt. Laut GCC-Manual wären das folgende: ARM Options -mapcs-frame -mno-apcs-frame -mabi=name -mapcs-stack-check -mno-apcs-stack-check -mapcs-float -mno-apcs-float -mapcs-reentrant -mno-apcs-reentrant -msched-prolog -mno-sched-prolog -mlittle-endian -mbig-endian -mwords-little-endian -mfloat-abi=name -msoft-float -mhard-float -mfpe -mthumb-interwork -mno-thumb-interwork -mcpu=name -march=name -mfpu=name -mstructure-size-boundary=n -mabort-on-noreturn -mlong-calls -mno-long-calls -msingle-pic-base -mno-single-pic-base -mpic-register=reg -mnop-fun-dllimport -mcir- rus-fix-invalid-insns -mno-cirrus-fix-invalid-insns -mpoke-function-name -mthumb -marm -mtpcs-frame -mtpcs-leaf-frame -mcaller-super-interworking -mcallee-super-interworking Ich sehe da sowohl Optionen zur Endianess als auch zum CPU-Typ. Der AVR-GCC gibt zum Beispiel für eine unbekannte -mmcu= Option die Liste aller bekannten MCU types aus. Vielleicht ist das ja bei dir für eine unbekannte -mcpu= Option auch der Fall?
Hallo Jörg, I hab mal testweise -mcpu=TMS470 eingesetzt. Die Kompilierung wurde daraufhin mit einer Fehlermeldung abgebrochen: FlashLoader.c:0: error: bad value (TMS470) for -mcpu= switch make: *** [FlashLoader.d] Error 1 Das ich die Option -mbig-endian beim Compiler-Aufruf setzen kann, ist mir bekannt. Die Frage ist jedoch, ob dies für die Umstellung auf das Big-Endian-Format ausreicht? Sieh mal hier: http://groups.yahoo.com/group/gnuarm/message/1988?threaded=1 Daraufhin fällt mir doch jetzt auf, das ich hier noch nicht erwähnte mit WinARM zu arbeiten. Hole es hiermit nach. Karsten
Folgendes steht in arm.h: arm.h: %{mcpu=arm2:-D__ARM_ARCH_2__} \ arm.h: %{mcpu=arm250:-D__ARM_ARCH_2__} \ arm.h: %{mcpu=arm3:-D__ARM_ARCH_2__} \ arm.h: %{mcpu=arm6:-D__ARM_ARCH_3__} \ arm.h: %{mcpu=arm600:-D__ARM_ARCH_3__} \ arm.h: %{mcpu=arm610:-D__ARM_ARCH_3__} \ arm.h: %{mcpu=arm7:-D__ARM_ARCH_3__} \ arm.h: %{mcpu=arm700:-D__ARM_ARCH_3__} \ arm.h: %{mcpu=arm710:-D__ARM_ARCH_3__} \ arm.h: %{mcpu=arm720:-D__ARM_ARCH_3__} \ arm.h: %{mcpu=arm7100:-D__ARM_ARCH_3__} \ arm.h: %{mcpu=arm7500:-D__ARM_ARCH_3__} \ arm.h: %{mcpu=arm7500fe:-D__ARM_ARCH_3__} \ arm.h: %{mcpu=arm7m:-D__ARM_ARCH_3M__} \ arm.h: %{mcpu=arm7dm:-D__ARM_ARCH_3M__} \ arm.h: %{mcpu=arm7dmi:-D__ARM_ARCH_3M__} \ arm.h: %{mcpu=arm7tdmi:-D__ARM_ARCH_4T__} \ arm.h: %{mcpu=arm8:-D__ARM_ARCH_4__} \ arm.h: %{mcpu=arm810:-D__ARM_ARCH_4__} \ arm.h: %{mcpu=arm9:-D__ARM_ARCH_4T__} \ arm.h: %{mcpu=arm920:-D__ARM_ARCH_4__} \ arm.h: %{mcpu=arm920t:-D__ARM_ARCH_4T__} \ arm.h: %{mcpu=arm9tdmi:-D__ARM_ARCH_4T__} \ arm.h: %{mcpu=strongarm:-D__ARM_ARCH_4__} \ arm.h: %{mcpu=strongarm110:-D__ARM_ARCH_4__} \ arm.h: %{mcpu=strongarm1100:-D__ARM_ARCH_4__} \ arm.h: %{mcpu=xscale:-D__ARM_ARCH_5TE__} \ arm.h: %{mcpu=xscale:-D__XSCALE__} \ arm.h: %{mcpu=ep9312:-D__ARM_ARCH_4T__} \ arm.h: %{mcpu=ep9312:-D__MAVERICK__} \ arm.h: %{mcpu=iwmmxt:-D__ARM_ARCH_5TE__} \ arm.h: %{mcpu=iwmmxt:-D__XSCALE__} \ arm.h: %{mcpu=iwmmxt:-D__IWMMXT__} \ Ich kenne mich mit ARM nicht lang, musst mal gucken, was dir davon am nächsten kommt.
Hallo Jörg, bisher nutze ich -mcpu=arm7tdmi. Dies ist soweit auch korrekt, da der TMS470 einen ARM7TDMI-Core besitzt. Ich denke mal, dass dies hier nicht das Problem ist. Aber.., ich mich ja auch irren. Vielleicht sehe ich den Zusammenhang ja nicht. Karsten
Hallo Jörg, Das Problem scheint gelöst. Nach dem Verwenden der -mbig-endian Option des gcc und der Umstellung des upload-Programmes (ebenfalls auf des big endian format) scheint das Problem aus der Welt zu sein. Karsten
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.