Alt.F4 0 August 20, 2023 Posted August 20, 2023 (edited) · Report post Если в HardFault_Handler вызывать внешнюю функцию для сохранения данных об ошибке, то IAR всегда на входе в обработчик вставляет сохранение в стек "PUSH {R7,LR}" Но это есть проблема, если указатель стека невалидный, то улетаем в 0xfffffffe Прописываю на входе сброс указателя стека __set_MSP(), но IAR все равно перед этим вставляет "PUSH {R7,LR}" Возможно ли заставить IAR сперва выполнить код сброса указателя или вообще не использовать стек в обработчике?.. Edited August 21, 2023 by haker_fox Тему переместил. Quote Share this post Link to post Share on other sites More sharing options...
x893 79 August 20, 2023 Posted August 20, 2023 · Report post Ассемблер в помощь Quote Share this post Link to post Share on other sites More sharing options...
Alt.F4 0 August 20, 2023 Posted August 20, 2023 · Report post Не помогает, любые ассемблерные вставки идут после "PUSH {R7,LR}" Quote Share this post Link to post Share on other sites More sharing options...
jcxz 344 August 20, 2023 Posted August 20, 2023 · Report post Использовать префиксы: __noreturn, __task: __noreturn __task void Handler() { ... } 7 минут назад, Alt.F4 сказал: Не помогает, любые ассемблерные вставки идут после "PUSH {R7,LR}" Не "вставки", а нормальный ассемблер. Quote Share this post Link to post Share on other sites More sharing options...
Alt.F4 0 August 20, 2023 Posted August 20, 2023 · Report post jcxz, "__noreturn" сработало! Спасибо! Quote Share this post Link to post Share on other sites More sharing options...