Vladimir Ljaschko (14.07.2013 10:02, просмотров: 7337)
Нашел в старом проекте следы недописанного загрузчика, хочу доделать, но все забыл, проверьте плз правильность мыслей. Сам загрузчик без прерываний, это значит, что таблицу векторов не нужно располагать в ОЗУ, достаточно перенести ее в другое место ПЗУ.
В MSP430 таблица векторов, включая вектор сброса, находится в конце памяти.
Распределяю адреса: загрузчик в конце, приложение в начале памяти, перед загрузчиком вспомогательная таблица векторов, контрольные суммы.
Пишу сам загрузчик: вектор сброса оставляю как есть, на остальные вектора оригинальной таблицы пишу переходы на вспомогательную таблицу векторов. Вектора указывают в никуда, но прерывания запрещены. Hex записывается как получился.
Приложение, получившийся hex подлежит модификации для загрузки: оригинальная таблица векторов средствами внешней программы переносится на место вспомогательной таблицы векторов, и пересчитывается контрольная сумма.
Последовательность работы: стартует загрузчик, считает свою контрольную сумму, проверяет флаг загрузки, считает контрольную сумму приложения, принимает приложение, проверяет контрольную сумму опять, переходит на вектор сброса вспомогательной таблицы, оттуда на приложение.
Приложение может вызвать загрузку установкой флага загрузки в no_init ОЗУ и рестартом. Флаг должен быть сложной комбинацией, которая не должна устанавливаться при включении питания.
Как-то сложно, но как проще не вижу.