Coldfire заставляет использовать оперативную память вместо реестра

У меня есть приложение, написанное на C, которое работает на процессоре Coldfire.

Мне нужно заставить его использовать оперативную память для всех локальных переменных (объявленных в функциях) вместо использования регистров; для правильной отладки приложения.

Как мне это сделать?

Изменить для получения дополнительной информации

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

Заранее спасибо, привет.

1 ответ

Решение

Обычный способ сделать это в целях отладки это что-то вроде

#ifdef DEBUG_RELEASE
  volatile uint8_t x;
#else
  uint8_t x;
#endif

После завершения отладки вы можете удалить все ключи компилятора. Но они полезны, так что вы не оставляете отладочный код случайно (очень распространенная проблема).

На большинстве компиляторов приведенного выше достаточно для принудительной установки переменных в ячейки ОЗУ. Если это не так, вы можете пойти еще дальше:

  volatile uint8_t x;
  volatile uint8_t* dummy = &x;

Сейчас x должен быть выделен в оперативной памяти, потому что его адрес был использован.

Примечание: если вы используете компилятор Codewarrior, он поставляется с различными версиями, в которых по умолчанию включена оптимизация. Возможно, вам придется отключить различные оптимизации вручную для отладки.

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