-
1. Data: 2010-05-06 06:00:07
Temat: STM32 i GNU assembler - problem z movs
Od: SM <b...@k...com.pl>
Witam,
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
-
2. Data: 2010-05-06 06:11:16
Temat: Re: STM32 i GNU assembler - problem z movs
Od: Jacek Radzikowski <j...@s...die.die.die.piranet.org>
On 05/06/2010 02:00 AM, SM wrote:
[...]
> 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?
Kompilujesz w trybie thumb, a tam zdaje się masz dostęp tylko do
rejestrów R0-R7
pzdr.
j.
-
3. Data: 2010-05-06 06:19:43
Temat: Re: STM32 i GNU assembler - problem z movs
Od: SM <b...@k...com.pl>
> Kompilujesz w trybie thumb, a tam zdaje się masz dostęp tylko do
> rejestrów R0-R7
>
> pzdr.
> j.
>
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 www.st.com
strona 81/154 przykład użycia MOV jak byk
jest:
MOVSR11, #0x000B; write value of 0x000B to R11, flags get updated
-
4. Data: 2010-05-06 06:50:24
Temat: Re: STM32 i GNU assembler - problem z movs
Od: Zbych <a...@o...pl>
SM pisze:
>> Kompilujesz w trybie thumb, a tam zdaje się masz dostęp tylko do
>> rejestrów R0-R7
>>
>> pzdr.
>> j.
>>
>
> 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?
thumb2?
-
5. Data: 2010-05-06 10:08:08
Temat: Re: STM32 i GNU assembler - problem z movs
Od: SM <b...@k...com.pl>
Zbych pisze:
> SM pisze:
>>> Kompilujesz w trybie thumb, a tam zdaje się masz dostęp tylko do
>>> rejestrów R0-R7
>>>
>>> pzdr.
>>> j.
>>>
>>
>> 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?
>
> thumb2?
Nie łyka ani:
-mcpu=cortex-m3 -mthumb2
ani:
-mcpu=cortex-m3 -mthum-2
SM
-
6. Data: 2010-05-06 10:13:07
Temat: Re: STM32 i GNU assembler - problem z movs
Od: SM <b...@k...com.pl>
Zbych pisze:
> SM pisze:
>>> Kompilujesz w trybie thumb, a tam zdaje się masz dostęp tylko do
>>> rejestrów R0-R7
>>>
>>> pzdr.
>>> j.
>>>
>>
>> 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?
>
> thumb2?
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
-
7. Data: 2010-05-06 13:43:46
Temat: Re: STM32 i GNU assembler - problem z movs
Od: SM <b...@k...com.pl>
>
> Kompilujesz w trybie thumb, a tam zdaje się masz dostęp tylko do
> rejestrów R0-R7
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
-
8. Data: 2010-05-06 14:03:12
Temat: Re: STM32 i GNU assembler - problem z movs
Od: SM <b...@k...com.pl>
SM pisze:
> Witam,
>
> 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
No i chyba znalazłem odpowiedź:
-mthumb -march=armv7-m uaktywnia thumb-2
do tego w kodzie .syntax unified.
SM
-
9. Data: 2010-05-06 14:12:15
Temat: Re: STM32 i GNU assembler - problem z movs
Od: cepu69 <c...@t...pl>
Jacek Radzikowski wrote:
> On 05/06/2010 02:00 AM, SM wrote:
> [...]
>> 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?
To jest wlasnie przyczyna
> Kompilujesz w trybie thumb, a tam zdaje się masz dostęp tylko do
> rejestrów R0-R7
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.
http://theory.cs.uni-bonn.de/info5/system/parlab/dna
rd/thumbquickref.pdf
-
10. Data: 2010-05-06 14:22:41
Temat: Re: STM32 i GNU assembler - problem z movs
Od: SM <b...@k...com.pl>
cepu69 pisze:
> Jacek Radzikowski wrote:
>
>> On 05/06/2010 02:00 AM, SM wrote:
>> [...]
>>> 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?
>
> To jest wlasnie przyczyna
>> Kompilujesz w trybie thumb, a tam zdaje się masz dostęp tylko do
>> rejestrów R0-R7
>
> 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.
> http://theory.cs.uni-bonn.de/info5/system/parlab/dna
rd/thumbquickref.pdf
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