Кстати да.. Только заметил
16 битные желательно использовать?
Не желательно, а STM32, как и прочие микроконтроллеры не умеет A32 в принципе. Так что любой не-thumb код не заведётся вообще никак. А так, да, thumb кодируется 16 или 32 битами. Вычисления и адреса при этом 32-битные.
«Классический» формат кодирования ARM-инструкций.
org 0x08000000 thumb dw 0x20004000 ; Stack dw start dw 14 dup dummy dummy: b dummy GPIOC_ADDR = 0x40011000 RCC_ADDR = 0x40021000 LED_PIN = 13 start: movs r0,RCC_ADDR and 0xffff movt r0,RCC_ADDR shr 16 movs r1,0x10 ; Port C str r1,[r0,0x18] ; Enable port C in RCC.APB2ENR subs r0,1 shl 16 ; R0 = GPIOC_ADDR movs r1,0010b shl ((LED_PIN - 8) * 4) ; GPIO_C.CRH: output, 2 MHz str r1,[r0,0x04] loop: mov r1,0x100000 delay: subs r1,r1,1 bcs delay ldr r1,[r0,0x0c] ; GPIO_C.ODR eors r1,r1,1 shl LED_PIN str r1,[r0,0x0c] b loop Это фасмарм, околоминимальное мигание светодиодом под F103. Больше уже нечего выкинуть, наверное.
cortex-m3 умеет в некоторые 32-битные команды
Thumb-2 всё ещё thumb.
Обсуждают сегодня