Подскажите если есть идеи, где мог сделать ошибкy.
Недавно подключить к готовому проекту Cortex M0 bootloader. Перенес вектора прерываний приложения из начала флеш в середину, сделал ремап векторов. scmRTOS запускается успешно но стал вылетать в HardFault_Handler после вызова channel.push() в прерывании UART.
Вылет происходит когда накладываюя 2 прерывания. От системного таймера и вызова метода push().
Поиск выхода в точку падения по методу Сергей Борщ, в дизассемблере по шагам на выход из обработчика стабильно приводит к позиции scmRTOS: while(CurProcPriority != SchedProcPriority);
Размер стека я менял - не помогает. Если медленно шагать по щагам в дизасме, найти точку вылета не получается. Все работает.
Я знаю, что каналы в прерываниях использовать не рекомендовано. Но программа отлично и долго работала в этом варианте. И только сдвиг векторов из начала flash порушил работоспособность.
Неделя борьбы с багом ни к чему не привела, может у кого есть свежая идея. Спасибо.
--------------------
|