2013-11-30 7 views
1

Я должен спросить об этом ... Это буквально сбило меня с ума уже несколько дней. После выбора в качестве инструментальной цепочки рука-не-eabi моя жизнь стала своего рода кошмаром, и причина очень проста - arm-none-eabi - как рассматривает каждый комментарий как инструкцию, и, кроме того, иногда он просто не понимает ARM ассемблер бросали причудливые ошибки как «AREA плохая инструкция» ...arm-none-eabi-as и знак комментариев ARM ';'

Вот код, который я скопировал и вставить из Документов в Keil в:

AREA  Loadcon, CODE, READONLY 
    ENTRY        ; Mark first instruction to execute 
start 
    BL  func1      ; Branch to first subroutine 
    BL  func2      ; Branch to second subroutine 
stop 
    MOV  r0, #0x18     ; angel_SWIreason_ReportException 
    LDR  r1, =0x20026    ; ADP_Stopped_ApplicationExit 
    SVC  #0x123456     ; ARM semihosting (formerly SWI) 
func1 
    LDR  r0, =42     ; => MOV R0, #42 
    LDR  r1, =0x55555555   ; => LDR R1, [PC, #offset to 
             ; Literal Pool 1] 
    LDR  r2, =0xFFFFFFFF   ; => MVN R2, #0 
    BX  lr 
    LTORG        ; Literal Pool 1 contains 
             ; literal Ox55555555 
func2 
    LDR  r3, =0x55555555   ; => LDR R3, [PC, #offset to 
             ; Literal Pool 1] 
    ; LDR r4, =0x66666666    ; If this is uncommented it 
             ; fails, because Literal Pool 2 
             ; is out of reach 
    BX  lr 
LargeTable 
    SPACE 4200      ; Starting at the current location, 
             ; clears a 4200 byte area of memory 
             ; to zero 
    END        ; Literal Pool 2 is empty 

Мой вопрос: Какие флаги следует использовать для make arm-none-eabi - как понять свои собственные инструкции ассемблера и рассматривать комментарии как комментарии?

* ДОБАВЛЕНО: * Вот команда, я использую, чтобы скомпилировать этот код:

arm-none-eabi-gcc hello.S -Os -g -mthumb -mcpu=cortex-m3 -msoft-float -o hello.elf

ответ

4

символов по умолчанию для запуска однострочный комментарий в синтаксисе ARM сборки GNU является @ IIRC. Как и в:

BL func1    @ Branch to first subroutine 

Что касается директив ассемблера; они специфичны для ассемблера, поэтому вы не можете просто взять код armasm и собрать его с помощью ассемблера GNU или наоборот. Вам нужно будет выяснить, что означает каждая директива, и попытаться найти соответствующий для ассемблера, который вы собираетесь использовать.

Например, для замены AREA Loadcon, CODE, READONLY вы, вероятно, можете использовать .text (если вам не нужно иметь возможность обратиться к разделу по его названию).

1

ГНУ ассемблер хорошо известен тем, что свой собственный язык ассемблера хорошо заменить установленных синтаксисов. В основном ваш синтаксис ассемблера руки, как написано, не работает с gnu. Что касается комментариев, я предпочитаю использовать комбинацию обоих: @ для моих комментариев, кроме того, вам нужно будет выяснить синтаксис, который является общим между обоими, в какой-то момент, когда я разрабатывал для обоих, я бы/мог писать код, который собранные на обоих, но у меня больше нет доступа.

да это очень расстраивает ...

1

Необходимо проверить gnu asdocumentation. Как правило, каждая архитектура имеет свои отличия от syntax. ARM не является different.

+0

Я сделал это. На самом деле компилятор теперь может понять код. Итак, теперь у меня есть только некоторые проблемы с crt0.S. В нем говорится о неопределенной переменной __end__ (что странно, я не использую какие-либо пользовательские скрипты компоновщика). – user1415536

Смежные вопросы