blindman писал(а):Мне тоже много чего кажется. А чтобы знать наверняка, надо решить такую задачку: даны
- скорость передачи по радио
- скорость передачи по уарту
- вероятность ошибки при передачи пакета
- размер пакета
- время обработки пакета (то есть время, в течение которого передача данных не производится - работа с буферами, переключение режимов итп, передача битов синхронизации и служебных данных)
Найти размер буфера уарта, при котором вероятность его переполнения будет равна нулю
Ответ на неправильно поставленную задачу тоже неправильный - буфер должен быть бесконечного размера

А правильно поставленная задача - матожидание времени передачи объема данных минимально + вероятность переполнения буфера не более чем скажем 0.1% при постоянной подаче информации на вход.
Ну и размер пакета я бы тоже искомым сделал.
А вообще скорость по UARTу - пусть U, скорость по радио - R, время обработки пакета W, количество полезных байт в пакете S, размер буфера B, вероятность успешной отправки отдельного байта по радио P, количество служебных байт в пакете K.
Тогда вероятность убивания пакета P0=1-P^(K+S) при передаче по радио.
Один цикл отправки\получения занимает времени T0=2*(W+(S+K)/R). За это время в буфер поступает U0=U*T0 байт.
Пусть Q(t,a,b) вероятность нахождения в состоянии "мы находимся в итерации #t, в буфере [b] байт", при этом если в буфере b=-1 байт, тогда значит потеряли 1 пакетик. Тогда инициализируем Q(0,*)=0, Q(0,0)=1.
Далее берем i, выставляем Q(i+1,*)=0 и заполняем их:
1. Q(i+1,-1)=Q(i,-1);
2. Для всех 0<=b<=B-U0 выставляем:
2.1. Q(i+1,b+U0)=P0*Q(i,b);
2.2. Q(i+1,max(0,b-S)+U0)=(1-P0)*Q(i,b);
3. Для всех B-U0<b<=B выставляем:
3.1. Q(i+1,-1)=P0*Q(i,b);
3.2. Q(i+1,max(0,b-S)+U0)=(1-P0)*Q(i,b);
В итоге получим в Q(n,-1) вероятность возникновения хотя-бы 1 переполнения буфера на n-й итерации

Сам охренел

По моему надо быть проще - надо с 4 кратным запасом сделать меньше нужной величины вероятность крушения подряд N пакетов (сколько их в буфер влезает), тогда можно наверное будет забить на точные подсчеты
