[nedoPC-180] Самодоговаривающаяся по SPI этажерка

Публичный форум для http://www.nedopc.org/nedopc

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:
Shaos wrote:Мы можем наблюдать всё, что угодно с той или иной степенью вероятности, если вероятность события больше нуля...
Верно... вот и
He3HauKo wrote:Если есть вероятность збоя передачи по SPI, то какая разница сколько передавать :-?
Чем больше передавать за одну посылку, тем чаще будут невалидные посылки (при той же вероятности единичного сбоя) - очевидно же :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16710
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:Чем больше передавать за одну посылку, тем чаще будут невалидные посылки (при той же вероятности единичного сбоя) - очевидно же :roll:
Совершенно нет... может быть ни одной. Это же вероятность, а не обязательство.
iLavr
User avatar
He3HauKo
Senior
Posts: 176
Joined: 09 Aug 2012 11:20
Location: 95.135.174.189

Post by He3HauKo »

Товарищи физики-теоретики, таким темпом мы скоро к квантовой механике дойдем :roll:
Я всего то предложил поднять на несколько байт во благо определения параметров железки!!!!
1 байт - на тип устройства
2 байта - на количество портов
3 байта - на количество памяти
Чтобы не ужимать прям до бит, и не делить память по параграфам или чем то еще(секторам).

К то муже простенькая проверка на ошибки все исправит! 8)
Хочу стать всезнайкой ;-)
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:
Shaos wrote:Чем больше передавать за одну посылку, тем чаще будут невалидные посылки (при той же вероятности единичного сбоя) - очевидно же :roll:
Совершенно нет... может быть ни одной. Это же вероятность, а не обязательство.
Если мы будем много раз пробовать, то количество будет приближаться к соотношеню, определяемому вероятностью - чему вас там в ваших академях учут?

P.S. Я не просто так делю память по страницам кратным степеням двойки - так декодеры адресов будут проще...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
He3HauKo
Senior
Posts: 176
Joined: 09 Aug 2012 11:20
Location: 95.135.174.189

Post by He3HauKo »

Shaos wrote: P.S. Я не просто так делю память по страницам кратным степеням двойки - так декодеры адресов будут проще...
Тут то я согласен!!!!
А в остальном.... :-?
Хочу стать всезнайкой ;-)
User avatar
Lavr
Supreme God
Posts: 16710
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:Если мы будем много раз пробовать, то количество будет приближаться к соотношеню,
определяемому вероятностью - чему вас там в ваших академях учут?
Да вот тому, что тебе совершенно верно He3HauKo с самого начала заметил...
iLavr
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Для особо непонятливых - программка:

Code: Select all

#include <stdio.h>
#include <time.h>
int main(int argc,char **argv)
{
 int i,j,k,c,ok;
 int number_of_packets = 100;
 int bits_per_packet = 10;
 int total_bits = 0;
 int error_bits = 0;
 int error_packets = 0;
 srand(time(NULL));
 if(argc>1) number_of_packets = atoi(argv[1]);
 if(argc>2) bits_per_packet = atoi(argv[2]);
 printf("\n");
 for(j=0;j<number_of_packets;j++)
 {
   ok = 1;
   for(i=0;i<bits_per_packet;i++)
   {
      k = rand()%100;
      if(k==99) c='*'; /* one percent of errors */
      else if(k>=50) c='1';
      else c='0';
      printf("%c",c);
      if(c=='*') { ok=0; error_bits++; }
      total_bits++;
   }
   if(ok) printf(" - GOOD\n");
   else { printf(" - BAD\n"); error_packets++; }
 }
 printf("\n");
 printf("Bits per packet - %i\n",bits_per_packet);
 printf("Total bits - %i\n",total_bits);
 printf("Error bits - %i (%2.2f%%)\n",error_bits,(error_bits*100.0/total_bits));
 printf("Total packets - %i\n",number_of_packets);
 printf("Failed packets - %i (%2.2f%%)\n",error_packets,(error_packets*100.0/number_of_packets));
 printf("\n");
 return 0;
}
Программка принимает из командной строки 2 аргумента - количество посылок (пакетов) и количество бит в посылке. Исходя из предположения, что 1% передаваемых бит передаётся с ошибкой, программа симулирует передачу и подсчитывает кол-во плохих пакетов. Вот запуски с одинаковой вероятностью ошибки 1% и с одинаковым количеством пакетов, но с разной их длиной (10,20 и 30):

Code: Select all

bash-4.1$ ./one_percent 50 10

110*001101 - BAD
00011*0011 - BAD
0010101110 - GOOD
1001001101 - GOOD
0010101101 - GOOD
1010100001 - GOOD
0010011011 - GOOD
1110000001 - GOOD
1000110110 - GOOD
1000010100 - GOOD
1100100101 - GOOD
0100100011 - GOOD
1011111100 - GOOD
1001011001 - GOOD
0001010111 - GOOD
011100*010 - BAD
0001000010 - GOOD
1100100110 - GOOD
1101111010 - GOOD
0101001000 - GOOD
1010110000 - GOOD
1010010010 - GOOD
0111011111 - GOOD
*110011011 - BAD
0011111110 - GOOD
1110101100 - GOOD
1010001010 - GOOD
1100011101 - GOOD
1110010111 - GOOD
1011100010 - GOOD
1011010111 - GOOD
1001100100 - GOOD
1000111000 - GOOD
0010000000 - GOOD
100111*111 - BAD
0111101000 - GOOD
0111001100 - GOOD
1010010110 - GOOD
0001001001 - GOOD
0101111101 - GOOD
0001100010 - GOOD
0101101011 - GOOD
1100001100 - GOOD
0010111111 - GOOD
1010001101 - GOOD
1110101001 - GOOD
0110000010 - GOOD
0100001011 - GOOD
1100001*00 - BAD
0101001111 - GOOD

Bits per packet - 10
Total bits - 500
Error bits - 6 (1.20%)
Total packets - 50
Failed packets - 6 (12.00%)

Code: Select all

bash-4.1$ ./one_percent 50 20

00110100110010001110 - GOOD
01011110101001001010 - GOOD
11001100*00000101011 - BAD
01111011011110110100 - GOOD
10000111111111101011 - GOOD
01000011011000001011 - GOOD
01001000011101100100 - GOOD
11100*10001001101101 - BAD
01011111011111010010 - GOOD
00010111000110101000 - GOOD
00001100100100111101 - GOOD
10100001011110001000 - GOOD
01010011011111111101 - GOOD
00111010110000001001 - GOOD
11001110010110001011 - GOOD
11110010011001011110 - GOOD
01110000100100101111 - GOOD
01111011010111001001 - GOOD
10101001111110010011 - GOOD
11101100111111100100 - GOOD
00101101100001010010 - GOOD
11100010100101110100 - GOOD
11100111110000101000 - GOOD
10010101011*10101110 - BAD
01010101010101011111 - GOOD
1001000*110100011110 - BAD
10000100000111111110 - GOOD
10101101001010000011 - GOOD
11111100101111011111 - GOOD
01100111101101110101 - GOOD
00010111100011010001 - GOOD
10000001010010011010 - GOOD
0101*011000010001011 - BAD
00000110011000100001 - GOOD
10100011001101110000 - GOOD
10010101011001101011 - GOOD
10011111101000000101 - GOOD
1000010100010100*011 - BAD
0100110011*101101111 - BAD
00110110100100101101 - GOOD
0100110111*001011101 - BAD
01101001100000111101 - GOOD
00000110000101100101 - GOOD
10110001111000111011 - GOOD
11100000101110100010 - GOOD
01111011001*11101001 - BAD
0011010*101100101011 - BAD
1*000000000000101010 - BAD
10000001110111101100 - GOOD
10111110111110000101 - GOOD

Bits per packet - 20
Total bits - 1000
Error bits - 11 (1.10%)
Total packets - 50
Failed packets - 11 (22.00%)

Code: Select all

bash-4.1$ ./one_percent 50 30

0111100000*0011010001111111110 - BAD
101101001001111100101111100010 - GOOD
001110001111110011100101000000 - GOOD
001111100010100010110010001011 - GOOD
1111*0110111101011011011001011 - BAD
110010011000011001010111010110 - GOOD
001111000110001110010011010001 - GOOD
101110101011000110111111010000 - GOOD
*10001111010110000110100100100 - BAD
111001010110111101000101111010 - GOOD
001100010011101010001101101010 - GOOD
111000100011*01010101000111010 - BAD
000*00101001010100110011000010 - BAD
010010010000110100111110010111 - GOOD
11011010*1100100011*1101101010 - BAD
010010101000011101100111011100 - GOOD
101001101100000111001000100010 - GOOD
*11100111000100111110101111010 - BAD
001000010011111001011101111011 - GOOD
010111110111110100001101001011 - GOOD
100011000110010000100010111111 - GOOD
011000110101011001000101010001 - GOOD
000001*10001011000111000011101 - BAD
010110001000100000101100110011 - GOOD
001001100000000011011011010100 - GOOD
011010010011010111001011011100 - GOOD
000010110110111110010001011001 - GOOD
101000110010*10101111100001101 - BAD
00010100101111110001*001100110 - BAD
011111001010001100010111101010 - GOOD
000010110011010110100000010110 - GOOD
110011*11010010010011110011100 - BAD
011010111010010110110111101100 - GOOD
001110001101100111011000100101 - GOOD
10100111100100011*000011100100 - BAD
1010100010100010011001011111*0 - BAD
0111011000111111110100*0101001 - BAD
111100110111001110110111110000 - GOOD
00110111010000100110100010110* - BAD
101001110110000010011110110011 - GOOD
101010111110110111*00101101010 - BAD
10110100111010010*001100011111 - BAD
010001000100010011101101000010 - GOOD
101001101111111010011100011001 - GOOD
000110001110010000100110011111 - GOOD
111100010011101000010111100111 - GOOD
100011001100010010101100000101 - GOOD
00100110001*011011110001000000 - BAD
111001100101110100111000100111 - GOOD
00*110011110011100010101000110 - BAD

Bits per packet - 30
Total bits - 1500
Error bits - 20 (1.33%)
Total packets - 50
Failed packets - 19 (38.00%)
Ещё вопросы есть?...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16710
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:Исходя из предположения, что 1% передаваемых бит передаётся с ошибкой, программа симулирует передачу и подсчитывает кол-во плохих пакетов.
Исходя из взятого с потолка "предположения, что 1% передаваемых бит передаётся с ошибкой",
никаких вопросов к автору нет.

Только вероятность не имеет ничего общего с этим предположением.
Это больше похоже на внесение некой систематической погрешности...

А для "этажерки", где платы фактически рядом, 1% передаваемых по SPI бит с ошибкой -
это не очень хорошая реализация SPI - не более того.
iLavr
User avatar
He3HauKo
Senior
Posts: 176
Joined: 09 Aug 2012 11:20
Location: 95.135.174.189

Post by He3HauKo »

Вероятность появления ошибки при передачи 100 байт больше, чем при передачи 1 байта. Но вероятность самого появления ошибки в том или другом варианте одинакова! :rotate:
Хочу стать всезнайкой ;-)
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

He3HauKo wrote:Вероятность появления ошибки при передачи 100 байт больше, чем при передачи 1 байта. Но вероятность самого появления ошибки в том или другом варианте одинакова! :rotate:
Угу - вот только единичная ошибка в пакете делает ВЕСЬ пакет невалидным...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:
Shaos wrote:Исходя из предположения, что 1% передаваемых бит передаётся с ошибкой, программа симулирует передачу и подсчитывает кол-во плохих пакетов.
Исходя из взятого с потолка "предположения, что 1% передаваемых бит передаётся с ошибкой",
никаких вопросов к автору нет.

Только вероятность не имеет ничего общего с этим предположением.
Это больше похоже на внесение некой систематической погрешности...

А для "этажерки", где платы фактически рядом, 1% передаваемых по SPI бит с ошибкой -
это не очень хорошая реализация SPI - не более того.
Я могу тоже самое пересчитать для 0.1% - суть презентации была показать, что процент отбраковки пакетов сильно зависит от их длины при прочих равных...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16710
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:Я могу тоже самое пересчитать для 0.1% - суть презентации была показать, что процент отбраковки пакетов сильно зависит от их длины при прочих равных...
А зачем? :o Это никак с вероятностью не связано...
Если бы процесс был вероятностный - то в твоих тестах не было бы такого количества ошибок,
как и такого регулярного их появления.

Лучше собирай свой железный SPI, и ты увидишь, что взятые тобой с потолка проценты не имеют
к нему никакого отношения, как на взятой тобой длине посылок, так и на той, о которой He3HauKo
говорил... "Прочих равных" - тут как раз и нет.

И его предложение "не ужимать прям до бит" - на мой взгляд, вполне верно, в рамках вышесказанного.



PS. Я поясню, чтоб не было впечатления о придирках: понятие вероятность вводится для случайного процесса.
С этой точки зрения для выбранной тобой длины пакета и предложенной He3HauKoй - никакой практической
разницы нет.
Поскольку длины пакетов слишком малы, чтобы проявилась статистика случайного процесса.
Если у тебя есть регулярный источник помех, что ты демонстрируешь своими выборками, то твои выкладки
совершенно вернЫ, но только процесс этот не случайный, и говорить о вероятности - бессмысленно.
iLavr
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Процесс будет иметь случайную составляющую, если у нас есть рейсы на пределе частоты работы или на порогах срабатывания логики и т.д.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16710
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:Процесс будет иметь случайную составляющую, если у нас есть рейсы на пределе частоты работы или на порогах срабатывания логики и т.д.
Ну так я и говорил - лучше делать надежный интерфейс, нежели возиться с его статистикой!
iLavr