Использование таблицы векторного смещения с библиотекой MBED в Eclipse IDE - PullRequest
0 голосов
/ 21 октября 2019

Я недавно закончил инженер-электронщик, и одна из моих первых задач в моей новой работе - импортировать код в компилятор Mbed. Я пытаюсь запустить пример Mbed Blinky на своем оборудовании с чипом LPC1769. Я экспортировал приложение Blinky в GNU Eclipse из онлайн-компилятора MBED и импортировал его в IDE.

Млинк-код Mbed работает нормально, когда я устанавливаю соответствующий светодиодный вывод (изменение LED1 в PinNames.h из1.10 до 2.13 для моего оборудования) и прошить его напрямую. Так что MBed и мой пользовательский HW не проблема. Однако в моей фирме есть собственный загрузчик, и его необходимо использовать с любым приложением. Пользовательский загрузчик требует, чтобы я запускал программу, начиная с 0x4000. Для этого моя фирма ранее добавляла эту строку в свой код, перепрошивала загрузчик и загружала выходной .bin-файл IDE на плату с помощью специальной программы загрузки FW.

    SCB->VTOR = (0x4000) & 0x1FFFFF80;

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

Я подозреваю, что мне нужно внести некоторые изменения во встроенную библиотеку CMSIS и / илиФайлы startup_LPC17XX.o и system_LPC17xx.o поставляются с экспортом MBED, но я запутался. Любая помощь приветствуется. Кроме того, я использую автоматически созданный make-файл, на случай, если будут какие-то чудеса.

1 Ответ

0 голосов
/ 21 октября 2019

Самое главное, вам нужно настроить местоположение кода в скрипте компоновщика, например:

MEMORY {
    FLASH   : ORIGIN = 0x4000,  LENGTH = 0x7C000
}

Проверьте код запуска и скрипт компоновщика для любых дополнительных абсолютных адресов во флэш-памяти.

Настройка VTOR необходима для прерываний, если загрузчик этого еще не сделал. Операция & выглядит странно;должно быть достаточно просто написать 0x4000 или, что еще лучше, что-то вроде:

SCB->VTOR = (uint32_t) &_IsrVector;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...