Ошибка инструкции ldr для arm на gcc отлично работает на armcc

LDR     r2, =0x0 :OR: (Region_64K << 1) :OR: Region_Enable

Что делает приведенная выше команда? на armcc он хорошо компилируется arm-none-eabi-gcc это дает ошибку

инструкция для мусора - `ldr r2,=0x0:OR:(Region_64K<<1):OR:Region_Enable'

где на gcc

Region_Enable = 0b1
Region_64K   = 0b01111

на руке

Region_Enable EQU 2_1
Region_64K   EQU 2_01111

1 ответ

Решение

Это синтаксис armasm для побитовых операторов в выражениях. Для ассемблера GNU вы захотите | вместо :OR:,

С оружием утверждает, что с помощью | как псевдоним почему-то не рекомендуется (хотя & за :AND: а также ^ за :EOR: очевидно, хорошо), возможно, вам придется прибегнуть к некоторой магии препроцессора, если вы хотите сохранить совместимость с обеими цепями инструментов.

Другие вопросы по тегам