Встроенная сборка компилятора C C51 в встроенную сборку SDCC

Я не очень разбираюсь в ассемблере, но для проекта мне нужно изменить несколько строк ассемблерного кода для компилятора C51 C в SDCC.

Это код для C51

setb    T1Run
setb    T0Run

setb    IDLE
jnb     T0Full, $

Который, скомпилированный с помощью SDCC, производит

?ASlink-Warning-Undefined Global 'IDLE' referenced by module 'Com_Func'

?ASlink-Warning-Undefined Global '$' referenced by module 'Com_Func'

?ASlink-Warning-Undefined Global 'T0Run' referenced by module 'Com_Func'

?ASlink-Warning-Undefined Global 'T1Run' referenced by module 'Com_Func'

?ASlink-Warning-Byte PCR relocation error for symbol  $
         file              module            area              offset
  Refby  ./Com_Func.rel    Com_Func          CSEG                     004A
  Defin  ./Com_Func.rel    Com_Func          CABS                     0000

как ошибки/предупреждения компилятора.

  • Я знаю, что символ $ заменяется ассемблером фактическим адресом инструкции, но что такое эквивалент SDCC?
  • Как я могу устранить предупреждения для T0Run и т. д.?

person Stefan Falk    schedule 24.07.2013    source источник


Ответы (2)


Я думаю, вы могли бы просто заменить $ на метку, определенную в той же строке.

00001$: 
  jnb     T0Full, 00001$

Обратите внимание, что согласно Руководству пользователя компилятора SDCC:

Все метки, определенные в коде на встроенном ассемблере, должны иметь форму nnnnn$, где nnnnn — число меньше 100 (что подразумевает максимальное количество меток на встроенном ассемблере в 100 на функцию).

Что касается других предупреждений компилятора, то это символы, которые предположительно нигде не определены. Как они были определены в исходном коде C51?

person James Holderness    schedule 24.07.2013
comment
Эти символы определены в файле C-заголовка. Включение этого файла не помогло. К настоящему времени я заменил символы их фактическим количеством. До сих пор не знаю, как сказать парсеру, что все в порядке - person Stefan Falk; 25.07.2013

LOL... Звучит как sdcc, это забавно. Я только сейчас начинаю добавлять заголовочные файлы. Пришлось кинуть в бин Дир, так как не нашел как keil в папке своего проекта.

это может помочь. сейчас я еще не эксперт, но некоторые вещи, которые они говорят, не работают, как они говорят. мне пришлось использовать как руководство SDCC, так и руководство по миграции, в конце концов я нашел правильный синтаксис для того, что хотел...

http://www.infineon.com/dgdl/AP0806510_XC800_Migration_Keil_2_SDCC.pdf?folderId=db3a30431375fb1a01138c57204603bd&fileId=db3a304314dca389011517efc5860d61&ack=t

person Lui    schedule 20.02.2016
comment
Интересно... тогда, когда я работал над этим, я сделал это для Infineon в Граце :D - person Stefan Falk; 20.02.2016