Alt.F4 0 20 августа, 2023 Опубликовано 20 августа, 2023 (изменено) · Жалоба Если в HardFault_Handler вызывать внешнюю функцию для сохранения данных об ошибке, то IAR всегда на входе в обработчик вставляет сохранение в стек "PUSH {R7,LR}" Но это есть проблема, если указатель стека невалидный, то улетаем в 0xfffffffe Прописываю на входе сброс указателя стека __set_MSP(), но IAR все равно перед этим вставляет "PUSH {R7,LR}" Возможно ли заставить IAR сперва выполнить код сброса указателя или вообще не использовать стек в обработчике?.. Изменено 21 августа, 2023 пользователем haker_fox Тему переместил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 56 20 августа, 2023 Опубликовано 20 августа, 2023 · Жалоба Ассемблер в помощь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alt.F4 0 20 августа, 2023 Опубликовано 20 августа, 2023 · Жалоба Не помогает, любые ассемблерные вставки идут после "PUSH {R7,LR}" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 236 20 августа, 2023 Опубликовано 20 августа, 2023 · Жалоба Использовать префиксы: __noreturn, __task: __noreturn __task void Handler() { ... } 7 минут назад, Alt.F4 сказал: Не помогает, любые ассемблерные вставки идут после "PUSH {R7,LR}" Не "вставки", а нормальный ассемблер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alt.F4 0 20 августа, 2023 Опубликовано 20 августа, 2023 · Жалоба jcxz, "__noreturn" сработало! Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться