-
- Подобное как-то вылечилось барьером - Vit(04.02.2023 10:14)
- Это патамушта вы неправильно делаете переход от загрузчика к
приложению. Надо так: по известному адресу пишем волшебное число и
делаем NVIC_SystemReset(). Первым делом при старте (до
инициализации чего-либо) проверяем волшебное число по известному
адресу и причину сброса в соответствующем регистре (причина ==
software reset). Далее прыгаем в приложение. Всё. Никаких плясок с
запретом прерываний и прочей чепухи. SciFi(582 знак., 03.02.2023 20:18)
- Да, подобно делается. Я ключик в отдельном секторе флэша сохраняю.
По его наличию / отсутствию бутлоадер и знает что делать - сразу
прыгать или загружать новый дамп кода. Это же "прописи". Я здесь
просто волшебное интринсик __disable_IRQ. Команда которого Как?
валидна после системного ресета??? - bnb62(03.02.2023 20:36)
- Гм. Насколько я помню - у кортексов после ресета прерывания
запрещены. - LightElf(04.02.2023 00:17)
- Глобальные РАЗРЕШЕНЫ - il-2(04.02.2023 13:53)
- Точно, оплошал. У меня в стартапе первой командой идёт запрет
прерываний :-) - LightElf(04.02.2023 16:24)
- Ну и в чём тогда прикол? Без директивного разрешения прерываний
старт после Jamp немедленно приводит в HardFault_Handler. Кстати,
вместо запрета в бутлодыре прерываний, как и DSB, ISB, пишут
некоторые, что достаточно HAL_DeInit(); коль уже под HALom коитус -
логично. Надо проверить. - bnb62(04.02.2023 19:49)
- "Не понимаю я по вашему ни фига". (C) Каковы причины HardFault? И
какой конкретно процессор? LightElf(1 знак., 04.02.2023 20:17, ссылка)
- Cortex-M7. Для младших "бут" не делал. Особенность М4 - 7 в
пользовательском переносе вектора bnb62(715 знак., 04.02.2023 20:54, youtube)
- Во. Правильно заданный вопрос содержит минимум половину ответа :-) - LightElf(05.02.2023 03:00)
- Cortex-M7. Для младших "бут" не делал. Особенность М4 - 7 в
пользовательском переносе вектора bnb62(715 знак., 04.02.2023 20:54, youtube)
- "Не понимаю я по вашему ни фига". (C) Каковы причины HardFault? И
какой конкретно процессор? LightElf(1 знак., 04.02.2023 20:17, ссылка)
- Ну и в чём тогда прикол? Без директивного разрешения прерываний
старт после Jamp немедленно приводит в HardFault_Handler. Кстати,
вместо запрета в бутлодыре прерываний, как и DSB, ISB, пишут
некоторые, что достаточно HAL_DeInit(); коль уже под HALom коитус -
логично. Надо проверить. - bnb62(04.02.2023 19:49)
- Точно, оплошал. У меня в стартапе первой командой идёт запрет
прерываний :-) - LightElf(04.02.2023 16:24)
- Глобальные РАЗРЕШЕНЫ - il-2(04.02.2023 13:53)
- У меня всё работает. Нигде прерывания ни разрешаю, ни запрещаю. - SciFi(03.02.2023 20:48)
- Именно поэтому и работает. :) Мне лень было создавать отдельный проект бутлоадера - там же дофига нужных ресурсов и библий, поэтому и сделал из основного кода со всем "мясом срани" глобальных буферов и включенных прерываний. Просто в компиляте для 0x00000000 после инициализации всей хрени сразу вызываю функцию бутлоадера, она не имеет выхода кроме прыжка, загрузки и прыжка или цикличиского ожидания наличия файла прошивки на ftp сервере, и загрузки и прыжка. Удобно. bnb62(135 знак., 03.02.2023 21:26, картинка)
- Гм. Насколько я помню - у кортексов после ресета прерывания
запрещены. - LightElf(04.02.2023 00:17)
- Да, подобно делается. Я ключик в отдельном секторе флэша сохраняю.
По его наличию / отсутствию бутлоадер и знает что делать - сразу
прыгать или загружать новый дамп кода. Это же "прописи". Я здесь
просто волшебное интринсик __disable_IRQ. Команда которого Как?
валидна после системного ресета??? - bnb62(03.02.2023 20:36)
- Спасибо! В копилку. - Cкpипaч(03.02.2023 19:35)