Цитата(a9d @ Jan 21 2012, 19:42)

Заметил интересный феномен в версии 3.10 на микроконтроллере ATmega168pa.
Код
OS_INTERRUPT void USART_RXC_vect()
{
OS::TISRW_SS ISRW;
.....
}
Это прерывание не срабатывает. Тоже самое и с TX.
Использовал нечто подобное на Меге128 (RXC и UDRE, а не TXC):
Код
#pragma vector=USART1_RXC_vect
__interrupt void GSMUartRx()
{
OS::TISRW_SS ISRW;
unsigned char i=UDR1;
GsmRxPtr.WriteByte(i);
#if (COPY_GSMUART_TO_EXTUART==1)
ExtTxPtr.WriteByte(i);
#endif
}
#pragma vector=USART1_UDRE_vect
__interrupt void GSMUartTx()
{
OS::TISRW_SS ISRW;
unsigned char i=GsmTxPtr.ReadByte();
UDR1=i;
#if (COPY_GSMUART_TO_EXTUART==1)
ExtTxPtr.WriteByte(i);
#endif
if (GsmTxPtr.BufferNotEmpty()==0)
StopGsmUartTx();
}
Никаких проблем не возникало.
Возможно что-то неправильно с инициализацией прерываний?
Цитата(a9d @ Jan 21 2012, 19:42)

Заменил на ISR и заработало.
ISR это - TISRW? Или scmRTOS_ISRW_TYPE? Или что?
Цитата(a9d @ Jan 21 2012, 19:42)

В 4.0 это еще не проверял.
Проверял тоже в 3.10.