При построении исходного кода Project, который был ранее для ARM, для окон на основе с ошибкой компилятора "" нет такой инструкции: 'ldr r13, [r1]' - PullRequest
0 голосов
/ 11 июля 2019

У меня есть проект, который уже построен для ARM cortex M4 с использованием Atollic arm-atollic-eabi цепочки инструментов. Сейчас я пытаюсь построить тот же проект для Windows. Я использую Atollic PC tools, который, я думаю, использует GCC и G++ для внутреннего использования.

Я удалил всю зависимость от аппаратного обеспечения, которая была в коде, озвучив почти все такие вызовы. Теперь нет никакой ошибки компиляции, кроме одной, то есть такой инструкции: ldr r13,[r1]. Мой источник не использует никаких таких инструкций в явном виде.

Это журнал компилятора.

C:\Users\...\AppData\Local\Temp\ccFTr3cX.s: Assembler messages:
C:\Users\...\AppData\Local\Temp\ccFTr3cX.s:3773: Error: no such instruction: `ldr r13,[r1]'
  • Я удалил все внешние библиотеки и аппаратную зависимость моего целевого контроллера, т.е. FYI Kinetis K61FX512VMJ150
  • Я еще не пробовал с другой цепочкой инструментов компилятора, так как я зависим от этой Atollic IDE, и она предоставлена ​​цепочкой инструментов.

  • Нет такого кода для показа.

  • Но в качестве дополнительной информации, программное обеспечение на цели является многопоточным приложением, и я также удалил всю зависимость RTOS.

  • Я ожидаю, что мой код будет построен на ПК, который в настоящее время является Intel Core I5, но я не ограничен этим.

1 Ответ

2 голосов
/ 11 июля 2019

Использует ли ваш проект какой-либо встроенный ARM-ассемблер?Очевидно, что это не сработает при нацеливании на x86-64.

GCC компилирует исходный код C / C ++ в файл temp .s, а затем собирает его отдельно, поэтому возникает ошибка, подобная этой (включая путь ...\Temp\ccFTr3cX.s)) это точно то, что вы ожидаете, если пропустите где-нибудь оператор asm.

Это, вероятно, не расширенный оператор asm с ограничениями ввода / вывода, иначе компилятор, вероятно, заменил быв ldr eax, [rcx] или что-то.Но в любом случае вам нужен токен asm или __asm__ в исходном файле C ++, из которого была построена Temp\ccFTr3cX.s.

Просмотрите журналы сборки, чтобы увидеть, или используйте gcc -save-temps, чтобывы можете более просто взглянуть на этот .s и увидеть, из какого исходного файла он был построен.


R13 является указателем стека ARM32, поэтому этот код, вероятно, является частью функции переключения контекста.В противном случае вы редко загружаете новое значение указателя стека из памяти.

...