Ошибка инструкции 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:
очевидно, хорошо), возможно, вам придется прибегнуть к некоторой магии препроцессора, если вы хотите сохранить совместимость с обеими цепями инструментов.