`_naked`: Попытка скомпилировать устаревший код 8051 (FX2) с помощью SDCC, более поздняя версия запинается

У меня есть устаревший код для встроенного ядра 8051 (в Cypress FX2), который использовался для компиляции с другими версиями SDCC. Тем не менее, текущий SDCC не знает _naked классификатор:

delay.c:27: syntax error: token -> '_naked' ; column 21

как вызвано

static void
udelay1 (void) _naked
{
  _asm              ; lcall that got us here took 4 bus cycles
    ret         ; 4 bus cycles
  _endasm;
}

и другие случаи.

Как _naked практически предполагается сказать компилятору C: "Нет, не обращайте внимания на тот факт, что вы являетесь компилятором C, и понимаете, что вам нужно сохранить контекст фрейма", я не думаю, что мне следует просто #define это прочь

Есть ли какое-то решение этого? Должен ли я просто продолжить и вручную вставить ассемблер везде, где _naked функция используется? Я чувствую, что я бы предал компилятор на CALL там, и это изменило бы время.

1 ответ

_naked был заменен __naked в более новых версиях SDCC. То же относится и к asm/__asm, at/__at, interrupt,bit,xdata/__…,

Таким образом, это оказалось упражнением в заменах регулярных выражений.

У меня все еще есть линкер / ranlib / в основном ar проблемы, и CMake игнорирует то, что я приказываю использовать в качестве компиляторов, ну да ладно.

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