Zacząłem coś pisac na STM32F103 i mam problem z GNU assembler (Sourcery G++ Lite).
Wywołuję go: as.exe -mcpu=cortex-m3 -mthumb I nie wiem czy aby poprawnie, bo nie łyka mi
movs R11, #0x000B
Pisze: only lo regs allowed with immediate -- 'movs R11,#0x000B'
Czy ten asembler się nie nadaje dla tego procka? A może użyte opcje są niewłaściwe?
Z góry dzięki za pomoc, SM
Didn't find your answer? Ask the community — no account required.
J
Jacek Radzikowski
On 05/06/2010 02:00 AM, SM wrote: [...]
Kompilujesz w trybie thumb, a tam zdaje się masz dostęp tylko do rejestrów R0-R7
pzdr. j.
S
SM
No właśnie - chyba używam złej opcji dla asemblera że nie łyka mi tej instrukcji.
Czy ktoś mógłby podpowiedzieć jakiej opcji użyć aby można było kompilować pod STM32F103? Może niewłaściwa wersja asemblera GCC?
SM
P.S. W Programming Manual PM0056 z
formatting link
strona 81/154 przykład użycia MOV jak byk jest: MOVSR11, #0x000B; write value of 0x000B to R11, flags get updated
Z
Zbych
SM pisze:
thumb2?
S
SM
Zbych pisze:
Nie łyka ani:
-mcpu=cortex-m3 -mthumb2
ani:
-mcpu=cortex-m3 -mthum-2
SM
S
SM
Zbych pisze:
Nie mam jeszcze procka, więc nie wiem czy to łyknie, ale działa coś takiego:
as.exe -mcpu=cortex-m3 -mimplicit-it=thumb
i na początku w kodzie programu:
.syntax unified .code 16
SM
S
SM
Cortex-M3 pracuje tylko w Thumb-2 więc musi mieć dostęp do wszystkich rejestrów w tym trybie bo praca w trybie ARM (tylko 32bit instrukcje) tam nie istnieje. Thumb-2 łączy w sobie zarówno ARM jak i Thumb (wielkość opcode dla instrukcji może być 16 lub 32 bit).
SM
S
SM
SM pisze:
No i chyba znalazłem odpowiedź:
-mthumb -march=armv7-m uaktywnia thumb-2 do tego w kodzie .syntax unified.
SM
C
cepu69
To jest wlasnie przyczyna
Wujek Googel mowi :
gas/config/tc-arm.c : if (inst.operands[1].isreg) { (...) } else { if (inst.operands[0].reg > 7) { inst.error = _("only lo regs allowed with immediate"); return; }
Polecam zapoznanie sie z asemblerem procesora, np.
formatting link
S
SM
Cortex-M3 nie ma thumb, tylko thumb-2 i wtedy ma dostęp do wszystkich rejestrów.
-mthumb jest OK, brakowało mi "-march=armv7-m" - to przełącza gcc na thumb-2 a .syntax unified "łączy" ARM i thumb.
SM
C
cepu69
(..)
Niekoniecznie :
formatting link
"The Cortex-M3 core contains a decoder for traditional Thumb and new Thumb-2 instructions"
Czlowiek uczy sie cale zycie :)
eCos
formatting link
(pozwole sobie na drobna reklame) ma ustawine opcje gcc takie jak uzywales poczatkowo
-mcpu=cortex-m3 -mthumb i jak najbardziej wykorzystywane sa instrukcje thumb-2 (...) .syntax unified .thumb (...) .global hal_switch_state_vsr .thumb .thumb_func .type hal_switch_state_vsr, %function hal_switch_state_vsr:
mov r0,#CYGNUM_HAL_CORTEXM_PRIORITY_MAX msr basepri,r0 ^^^^^^^ to jest raczej thumb-2 mov r0,#2 // Set CONTROL register to 2 msr control,r0 isb // Insert a barrier
Dziwnie to wyglada jak dla mnie.
BTW.
formatting link
2.3.1. General-purpose registers
The general-purpose registers r0-r12 have no special architecturally-defined uses. Most instructions that can specify a general-purpose register can specify r0-r12.
Low registers
Registers r0-r7 are accessible by all instructions that specify a general-purpose register. High registers
Registers r8-r12 are accessible by all 32-bit instructions that specify a general-purpose register.
Registers r8-r12 are not accessible by all 16-bit instructions.
S
SM
Jest dokładnie tak jak piszesz. Podstawa to ".syntax unified".
Cortex-M3 używa Thumb-2, a więc łączy on ARM (32 bitowe instrukcje) i Thumb (16 bitowe instrukcje) "na raz"- nie trzeba przestawiać procka do pracy w tryb tylko ARM albo tylko Thumb.
Napisałem program używając zarówno instrukcji ARM 32-bit jak i Thumb 16-bit w trybie asemblera Thumb-2.
Potem to wylistowałem. Efekt był taki, że w Thumb-2 można używać zarówno instrukcji ARM jak i Thumb a asembler sam wstawia odpowiednie opcode. Jeśli instrukcja jest dozwolona jako Thumb 16bit, wstawia opcode 16bit, jeśli tylko jako ARM 32bit wstawia opcode 32bit.
SM
A
Adam Dybkowski
W dniu 2010-05-06 08:00 SM napisał(a):
lrrrrsaqqwr
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.