Код
systick_ISR
{...
systick_ISR
{...
systick_ISR
{
}...
}...
}
{...
systick_ISR
{...
systick_ISR
{
}...
}...
}
Итак. Кто тут хочет систик в себя впихнуть! У меня есть решение!!!!!!!
определяем регистр:
#define System_Handler_Control_And_State_Register (*((volatile uint32_t *) 0xE000ED24 ))
Он вдоках описан. В нем есть замечательный бит, который говорит нам, что сейчас работает какое то прерывание. В нашем случае о систике нам рассказывает бит 11.
Вот.
Как заходим в преррывание, и если оно долгое - мы убираем этот бит:
System_Handler_Control_And_State_Register &= ~( 1 << 11 );
Но по выходу из этого долгого прервания надо незабыть обязательно поставить этот бит на место!!!
Этот бит говорит ядру не только то, что сейчас работаеть какое то прерывание, но и то, что стек надо бы почистить.
Если не убрать - стек кончится и все встанет.
Я это дело попробовал - все работает!!!
И прерывание само себя прерывает, так сказать.
Во как.