-
11. Data: 2010-05-06 16:51:04
Temat: Re: STM32 i GNU assembler - problem z movs
Od: cepu69 <c...@t...pl>
SM wrote:
> 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?
>>
(..)
>
> Cortex-M3 nie ma thumb, tylko thumb-2 i wtedy ma dostęp
> do wszystkich rejestrów.
Niekoniecznie :
http://www.arm.com/files/pdf/IntroToCortex-M3.pdf
"The Cortex-M3 core contains a decoder for
traditional Thumb and new Thumb-2 instructions"
> -mthumb jest OK, brakowało mi "-march=armv7-m" - to przełącza
> gcc na thumb-2 a .syntax unified "łączy" ARM i thumb.
Czlowiek uczy sie cale zycie :)
eCos http://ecos.sourceware.org/ (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.
http://infocenter.arm.com/help/index.jsp?topic=/com.
arm.doc.ddi0337e/Chdbhfja.html
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.
-
12. Data: 2010-05-06 17:55:52
Temat: Re: STM32 i GNU assembler - problem z movs
Od: SM <b...@k...com.pl>
> ...
> Dziwnie to wyglada jak dla mnie.
>
> BTW.
> http://infocenter.arm.com/help/index.jsp?topic=/com.
arm.doc.ddi0337e/Chdbhfja.html
>
> 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.
>
>
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
-
13. Data: 2010-05-07 06:09:16
Temat: Re: STM32 i GNU assembler - problem z movs
Od: Adam Dybkowski <a...@4...pl>
W dniu 2010-05-06 08:00 SM napisał(a):
> 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 pom
lrrrrsaqqwr
--
Adam Dybkowski
http://dybkowski.net/
U/waga: przed wysłaniem do mnie maila usuń cyfry z adresu.
-