IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Передача через COM-порт.
сообщение
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Суть в общем то такая:
Проверка последовательного порта: передаваемые данные генери¬руются, принимаемые данные накапливаются в памяти; дополнительный конт¬роль - суммированием посылок с циклическим переносом; скорость обмена - от 1200 до 19200 Бод; длина байта - 5 бит.

Поскольку всего 5 бит информационные, то достаточно 3 битов для проверки, что вписывается в байт. Мне показалось, что отправлять целый байт с 3 битами проверочных символов, это кощутство, да и на производительности хреново скажется. Поэтому решил допихивать их в байт с информацией.Хотя тоже спорный вопрос.
Возник вопрос, как подобное действие совершить?
Вот до чего я пока что дошел.

//Процедура отправки байта
unsafe private void Send(byte b, bool error) {
edtSendByte.Text = "";
//Если посылаем в канал с помехами
if (error)
{
//С вероятностью в 40% генерируется ошибка
if ((new Random()).Next(0,5) > 2)
//В b - новый посылаемый байт
b = (byte)(new Random()).Next(0, 32);
}
//Тут надо сделать сдвиг и вычислить CRC




int n = 0;
edtSendByte.Text += b.ToString("X2")+" " ;
edtSendByte.SelectionStart = edtSendByte.Text.Length;
edtSendByte.ScrollToCaret();
//В стек кладем таймер, который потом в конце нам скажет, сколько времени шёл этот символ.
st.Push(new TResult());
do {

System.Threading.NativeOverlapped ol = new System.Threading.NativeOverlapped();
//Отправляем в HandleOut байт b длиной 1.
if (!NativeMethods.WriteFile(HandleOut, &b, 1, &n, ref ol)) {
Log("Пачка не отправлена");
return;
}
//И повторяем отправку, пока не отправится этот символ
} while (n < 1);
}


Здесь нету сдвига и собственно реализации CRC-3, большей мне и не надо.
В свое время писал уже, но для AnsiString да и на С++.

AnsiString Check(AnsiString s)
{
// a / b = c + r * b
int a = 0, b = 0;
AnsiString st = s, st1 = "", st2 = "";
for (int i = 1; i <= 5; i++)
a += StrToInt(st[i]) * pow(2, 5 - i);
b = 11;
int r = a % b;
int k = 0;
while (k < 3)
{
k++;
st1 += IntToStr(r % 2)[1];
r /= 2;
}
for (int i = 1; i <= k; i++)
st2 += st1[k - i + 1];
st += st2;
return st;
}

Но чесно говоря, вообще не вижу это полезным в данном случае.

В общем нужна помощ и теоритическая и практическая.

Сообщение отредактировано: Krjuger -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 155
Пол: Мужской

Репутация: -  0  +


Why not settling on games that is fun and at the same time your earning. Well itll make suspense because of the game as well but dude just try it and it gave me hope while pandemic is real rn. 4 Baccarat Mistakes That Beginners May Be Guilty Of Committing
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 19:09
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name