Это все ничего не меняет кроме того, что рвет целостность загрузчика, а значит усложняет работу с линкером.
Первая страница флеша не подлежит перепрошивке без риска окирпичить МК, ибо код всегда стартует с нулевого адреса, устанавливая им стек, а стирание может быть только постраничным.
Таким образом, первая страница флеша всегда является частью бутлоадера.
При написании кода application нужно проделать всего два телодвижения, чтобы привести уже отлаженный код к работе с boot. Я не понимаю что там может быть "непрозрачного"....
Начало main для application с комментом для отладки без boot (для boot отведено 0x4000 в начале флеша) :
Код: Выделить всё
int main (void)
{
SCB->VTOR = 0x4000; // закомментировать для отладки без boot
__enable_irq();
... бла-бла-бла...
}
Переход на application в boot с возможностью дебага boot без application:
Код: Выделить всё
void GoToApp(void)
{
uint32_t appJumpAddress;
typedef void(*pFunction)(void);
pFunction JumpToApplication;
if(!flags.reqGoToApp) return; // проверка флага требования выхода в application
flags.reqGoToApp = false;
#ifdef DEBAG_MODE
return;
#else
__disable_irq();
appJumpAddress = *( uint32_t*) (APP_ADDRESS+4); // to Reset App
JumpToApplication = (pFunction)appJumpAddress;
__set_MSP(*(__IO uint32_t*) APP_ADDRESS); // SP App
JumpToApplication();
#endif
}