bauerb Posted May 1, 2012 at 05:07 PM Share Posted May 1, 2012 at 05:07 PM Hi! Ich hab den Sourcery GCC installiert und versuche die Firmware de Master-Brick zu bauen. Dabei bekomme ich folgenden Fehler: ------------------------------------------------- /tmp/ccW8Lign.s: Assemblerm essages: /tmp/ccW8Lign.s:516: Error: registers may not be the same -- `strexb r0,r0,[r1]' /tmp/ccW8Lign.s:541: Error: registers may not be the same -- `strexh r0,r0,[r1]' make[2]: *** [CMakeFiles/master-brick.elf.dir/src/bricklib/drivers/cmsis/core_cm3.obj] Fehler 1 make[1]: *** [CMakeFiles/master-brick.elf.dir/all] Fehler 2 make: *** [all] Fehler 2 ------------------------------------------------- Sagt einem von euch das was? MfG Quote Link to comment Share on other sites More sharing options...
AreaScout Posted May 1, 2012 at 06:48 PM Share Posted May 1, 2012 at 06:48 PM Hi Ja, den Fehler hatte ich auch, öffne mal deine core_cm3.c und ändere die zwei entsprechenden Funktionen ab. Achtung die sind zweimal deklariert, nimm die zwei ab Zeile 755. /** * @brief STR Exclusive (8 bit) * * @param value value to store * @param *addr address pointer * @return successful / failed * * Exclusive STR command for 8 bit values */ uint32_t __STREXB(uint8_t value, uint8_t *addr) { //uint32_t result=0; register uint32_t result asm ("r2"); __ASM volatile ("strexb %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); return(result); } /** * @brief STR Exclusive (16 bit) * * @param value value to store * @param *addr address pointer * @return successful / failed * * Exclusive STR command for 16 bit values */ uint32_t __STREXH(uint16_t value, uint16_t *addr) { //uint32_t result=0; register uint32_t result asm ("r2"); __ASM volatile ("strexh %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) ); return(result); } Gruß Area Quote Link to comment Share on other sites More sharing options...
bauerb Posted May 1, 2012 at 07:54 PM Author Share Posted May 1, 2012 at 07:54 PM Hey! Danke für die schnelle Antwort. Dein Patch hat funktioniert. Er sollte aber auch ins Tinkerforge Git-Repo. MfG Quote Link to comment Share on other sites More sharing options...
borg Posted May 1, 2012 at 08:38 PM Share Posted May 1, 2012 at 08:38 PM Ich bekomme den Fehler nicht, welche Compiler Version verwendet ihr denn? Quote Link to comment Share on other sites More sharing options...
bauerb Posted May 1, 2012 at 08:54 PM Author Share Posted May 1, 2012 at 08:54 PM Ich hab ein Debian Squeeze laufen mit dem neuesten Sourcery GCC, den es bei denen auf der HP gibt. ----- arm-none-eabi-gcc (Sourcery CodeBench Lite 2011.09-69) 4.6.1 Copyright © 2011 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ----- Und die aktuellen Sourcen aus dem GIT-Repository. Quote Link to comment Share on other sites More sharing options...
bauerb Posted May 1, 2012 at 09:12 PM Author Share Posted May 1, 2012 at 09:12 PM Hab gerade festgestellt, dass das im englischen Forum schon diskutiert wurde. Da wird der Fehler auf die GCC-Version zurückgeführt. http://www.tinkerunity.org/forum/index.php/topic,239.0.html Quote Link to comment Share on other sites More sharing options...
borg Posted May 1, 2012 at 10:47 PM Share Posted May 1, 2012 at 10:47 PM Oh, mir war gar nicht aufgefallen dass das hier der gleiche Fehler ist wie der schon im englischen Forum aufgetreten war. Nach kurzem durchwühlen der GCC ARM inline Assembler Dokumentation bin ich mir nicht sicher ob der Fix von AreaScout funktioniert. Ich hab aber folgendes gefunden; In situations where your code depends on different registers used for input and output operands, you must add the & constraint modifier to your output operand Kann einer von euch ausprobieren ob der kram mit "=r" (result) funktioniert? Falls ja würde ich das einbauen, weil kaputt machen kann das an der Stelle definitiv nichts, höchstens langsamer. Quote Link to comment Share on other sites More sharing options...
AreaScout Posted May 2, 2012 at 08:26 AM Share Posted May 2, 2012 at 08:26 AM Hi Ich hab den fix auf dieser Webseite gefunden: http://old.nabble.com/-Bug-gas-13215--New%3A-ARM-Cortex-M3-strexh-strexb-instructions-with-same-registers-generates-error-td32516436.html Es sollte die von mir gepostete Lösung und sowohl die mit "=&r" funktionieren Gruß Area Quote Link to comment Share on other sites More sharing options...
borg Posted May 2, 2012 at 08:52 AM Share Posted May 2, 2012 at 08:52 AM OK, hab mal den =&r Fix committet. Quote Link to comment Share on other sites More sharing options...
AreaScout Posted May 2, 2012 at 08:30 PM Share Posted May 2, 2012 at 08:30 PM Danke ! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.