roboforum.ru

Технический форум по робототехнике.

Прием данных CRC8

Прием данных CRC8

ARKADIY » 14 фев 2013, 22:29

Здрасте)) У меня возник такой вопрос. Написал я программу на C# для отправки символа по USART в виде контрол суммы.
Отправляется эта сумма очень просто:
port.Write(sendPacket, 0, sendPacket.Length);
sendPacket - наше значение CRC8 и sendPacket.Lenght - длина пакета
Кто работал с CRC8 или другими помогите пожалуйста, дайте пожалуйста функцию на С которая принимает такую инфу и
желательно если у кого нить есть проект то если можно то и его ))

Re: Прием данных CRC8

noonv » 14 фев 2013, 23:21


Re: Прием данных CRC8

ARKADIY » 01 мар 2013, 09:15

noonv писал(а):пример

Я сделал код по твоему примеру. Он очень хороший и рабочий, но я использую софт на C#. Я пишу не на Ардуино, я могу принимать только char значения,а у тебя uint8_t. Но я в коде все поменял на unisgned char, но есть проблема. Я не знаю как слать данные с ПК :(((
Вот код для формирования CRC8
Код: Выделить всёРазвернуть
private void button1_Click(object sender, EventArgs e)
    {
        byte checksum;
        byte t = 255;   
        byte[] testVal = new byte[]{t};
        CRC8Calc crc = new CRC8Calc(CRC8_POLY.CRC8_CCITT);
        checksum = crc.Checksum(testVal);
        sp.Write(t.ToString());
        sp.Write(checksum.ToString());
    }

Я хочу отправлять числа на МК а это получается нельзя ((( И когда я шлю t.ToString() я наверно шлю "255", т.е. 3и символа.
Т.е. то что я тут шлю МК не воспринимает. Подскажите пожалуйста как с ПК слать данные на мк :((

Re: Прием данных CRC8

Angel71 » 01 мар 2013, 10:29

хоть изредка смотрите, что intellisense выдаёт или мсдн читайте, помогает. http://msdn.microsoft.com/ru-ru/library/ms143551.aspx.
Код: Выделить всёРазвернуть
public void WriteByte(byte data) { sp.Write(new byte[] { data }, 0, 1); }

или
Код: Выделить всёРазвернуть
byte[] ba = new byte[] { checksum };
sp.Write(ba, 0, 1);

или
Код: Выделить всёРазвернуть
byte[] ba = new byte[1];
ba[0] = checksum;
sp.Write(ba, 0, 1);
ba[0] = t;
sp.Write(ba, 0, 1);

или
Код: Выделить всёРазвернуть
sp.Write(new byte[] { checksum }, 0, 1);
sp.Write(new byte[] { t }, 0, 1);

или ...

Re: Прием данных CRC8

ARKADIY » 01 мар 2013, 14:24

Angel71 писал(а):хоть изредка смотрите, что intellisense выдаёт или мсдн читайте, помогает. http://msdn.microsoft.com/ru-ru/library/ms143551.aspx.
Код: Выделить всёРазвернуть
public void WriteByte(byte data) { sp.Write(new byte[] { data }, 0, 1); }

или
Код: Выделить всёРазвернуть
byte[] ba = new byte[] { checksum };
sp.Write(ba, 0, 1);

или
Код: Выделить всёРазвернуть
byte[] ba = new byte[1];
ba[0] = checksum;
sp.Write(ba, 0, 1);
ba[0] = t;
sp.Write(ba, 0, 1);

или
Код: Выделить всёРазвернуть
sp.Write(new byte[] { checksum }, 0, 1);
sp.Write(new byte[] { t }, 0, 1);

или ...

Извини, просто С шарп знаю не долго, где то неделю, все время на qt c++ сидел, там легче все для меня.
Если делать потвоему методу то будет все отсылаться как символ или как число? просто у меня byte ассоциируется численная переменная, а регистр МК UDR принимает символы, что то вроде char((
Извини что говорю может где то глупости просто си шарп мне не знаком.
Код: Выделить всёРазвернуть
byte[] ba = new byte[] { checksum };
sp.Write(ba, 0, 1);

Этот метод мне знаком. Если на нем остановиться, то тут число как символ будет отправляться?
просто
Код: Выделить всёРазвернуть
public void Write(byte[] buffer,   int offset,int count)
я получается передаю байтовый буффер как символ?

Re: Прием данных CRC8

Angel71 » 01 мар 2013, 15:42

предыдущие сообщения не цитируют и не предыдущие тоже не всегда нужно цитировать. это же форум, а не почта.
по ссылке выше по русски написано, что делает ф-я. там же в мсдн есть справочник по типам и куча сопутствующих вещей разжёвано.
хз, что у вас с чем ассоциируется, что вы под чаром понимаете и что именно он из себя представляет в вашем компиляторе. смотрите какой тип у вас является байтом и ищите какая ф-я из уарта получает байты.


Rambler\'s Top100 Mail.ru counter