diper (09.02.2009 23:06, просмотров: 156) ответил diper на scmRTOS + MSP430 + TISRW_SS не работает
Похоже выловил в чем дело Обработчик прерывания:
#pragma vector = XXX_VECTOR
OS_INTERRUPT void XXX_ISR()
{
OS::scmRTOS_ISRW_TYPE ISRW;
//...
Flag.SignalISR();
}
При выполненииvoid OS::TEventFlag::SignalISR()
{
TCritSect cs;
//...
}
TCritSect cs; создается на стеке по адресу 0x600 за пределами RAM
Поэтому при выполнении ~TCritSect() в SR записывается какято хрень в том числе разрешаются прерывания которые при входе были запрещены... дальше разбираться не стал.
Подправил строчку
INLINE inline void SetISRStackPointer() { __set_SP_register( reinterpret_cast<word>(__segment_end("CSTACK"))); }
наINLINE inline void SetISRStackPointer() { __set_SP_register( reinterpret_cast<word>(__segment_end("CSTACK")) - 2); }Девайс ожил.