Я задал этот вопрос на форуме SCB, но не получил ответа Я пытаюсь перенести некоторые проекты из uVision ide в SCB. Проблемы начались с реализации векторной таблицы. Для нелогич-, у меня есть простой C++ кодSourcery CodeBench ARM Cortex-M реализация векторной таблицы
#define STACK_TOP 0x20000800
typedef void (*handler_ptr)();
void ResetHandler() { while (1); }
void NMIHandler() { while (1); }
void HardFaultHandler() { while (1); }
__attribute__ ((section("vectors"))) handler_ptr const vector_table[] = {
(handler_ptr) STACK_TOP,
ResetHandler,
NMIHandler,
HardFaultHandler,
};
Этот код не компилируется, потому что библиотека SCB ищет «Int основной (ничтожной)» декларации. Хорошо, я могу добавить эту функцию, но тогда SCB игнорирует мою реализацию векторной таблицы и использует собственный (если я вызываю функцию, адрес которой в VT, я вижу обработчиков фиктивных объектов SCB).
Как я могу переписать реализацию SCB VT моей? Пожалуйста, не предлагайте использовать специальные имена функций SC3 (не рекомендуется поддерживать 2 IDE) или перемещать векторную таблицу в другую ячейку памяти.
__attribute__ ((section(".isr_vector"))) void (* const g_pfnVectors[])(void)
от Luminary Micro, "startup_gcc.c - код запуска для использования с инструментами GNU" не имеет никакого эффекта слишком
Спасибо.
Игорь, спасибо. Ты прав. Лучшим решением является отдельный заголовочный файл для каждого компилятора. Я нахожу правильное название раздела в файле компоновщика - .cs3.interrupt_vector, но компоновщик помещает объявление моего вектора после генерирования SCB. –
Мне удалось получить проект на C++ с таким же файлом «vectors.c/h» для Keil ARM 6.6 и GCC 6 для Cortex M7. Поскольку компилятор Keil (вызываемый через uVision - нуждается в специальном rant-) имеет предопределенные разделы (например, RESET), я изменил сценарий компоновщика GCC для соответствия. Более сложная задача - установить стек так же. Не совсем разобрался. – Flip