Цитата(Сергей Борщ @ Feb 4 2008, 16:02)

если контрольная сумма не совпала, то вы будете продолжать складывать следующие байты в RxBuffer[count_rx_byte]=rx; и выйдете за пределы буфера.
Абсолютно правильное замечание; исправил, но порочный эффект не исчез.
Цитата(Сергей Борщ @ Feb 4 2008, 16:02)

Почему не попадаете в точку выхода по тайм-ауту действительно непонятно. А системный таймер тикает, его прерывания происходят? Поставьте дерганье ногой в OS::SystemTimerUserHook(), убедитесь, что прерывания работают.
В системе крутится еще один процесс-просто лампочкой мигает, прерывание также сигнализирует о себе; после сбоя связи с ними ничего не происходит- как мигали, так и мигают. Так-что системный таймер тикает.
Цитата(Сергей Борщ @ Feb 4 2008, 16:02)

если нет работы (очередь пуста или переполнена) pop() или push() вызовет перепланировку и перевод текущего процесса в ожидание. Но ведь во-первых невозможно предугадать, какой из процессов будет текущим на момент вызова прерывания. И может он спать совсем не хочет

Серьезный эффект, согласен. Но тогда, может, стоит предусмотреть в этом сервисе, перед переводом текущего процесса в ожидание, некую проверку, скажем, ISR_Nest_Count,- если отлична от нуля, перевод не производить. По-крайней мере, в мануале на ось это стоит оговорить!
Цитата(Сергей Борщ @ Feb 4 2008, 16:02)

А во-вторых, вызов планировщика и процедура смены контекста вернет программу в один из потоков, но не в окончание обработчика прерывания. В результате выход из прерывания никогда не произойдет, прерывания обстанутся заблокированными, а на стеке прерванного процесса - каша из регистров, сохраненных обработчиком и переключателем контекста. Примерно так.
А разве из обработчика прерывания можно вызвать планировщик и менять контексты? Точнее, будет ли вызов планировщика иметь эффект:
Код
if scmRTOS_CONTEXT_SWITCH_SCHEME == 0
void OS::TKernel::Scheduler()
{
TCritSect cs;
if(ISR_NestCount) return;//в прерывании ISR_NestCount>0
..........................................
..........................................
..........................................
А уже после отработки прерывания, перед выходом в программу (ISR_NestCount==0), и произойдет вызов планировщика, возымеющий эффект…