Не могу сообразить в какую сторону копать.
- Войдите на сайт для отправки комментариев
В общем хочу модернезировать свой протокол обмена для UART, который соединяет 2 устройства, но вот пока не знаю как. Основные пожелания это короткие сообщения для быстрого обмена и контроль целостности пакета. Пока такая концепция:
1. Сократить пакет за счет избавления от разделителей. Если crc не совпадут то отправить запрос на повторную отправку данных. Недостаток в этом случае только может быть один: придется плодить структуры для разного набора типов данных.
Поток пакетов будет очень активный, поэтому нужно его контролировать и стараться ничего не терять. Может Агурова почитать?
Может есть другие концепции для обмена между устройствами? Если есть какие нибудь примеры буду благодарен.
Думаю структура пакета будет выглядеть так:
union{
uint_8bit Command;
uint_32bit Data;
uint_8bit crc;
}my_paket;
Как-то читал про проблемы с выравниванием данных в структурах, когда в них содержится разный тип данных, но уже ничего не помню. Не будет ли здесь такой проблемы?
И еще такой вопрос: возможно ли создать массив с элементами типа String?
В общем хочу модернезировать свой протокол обмена для UART, который соединяет 2 устройства, но вот пока не знаю как.
эта фраза выносит мозг. Слова "модернизировать свой протокол" предполагают. что вы его сами разработали и уже написали. Если сами написали - то странно что не знаете как модернизировать....
другие? а какие вы уже изучили?
если с обоих сторон будут устройства одной архитектуры - например. два 8-битных МК АВР - на выравнивание можно забить
как говорится - "можно, но не нужно"
Думаю, что "структура union" даже не скомпилируется.
В общем хочу модернезировать свой протокол обмена для UART, который соединяет 2 устройства, но вот пока не знаю как.
эта фраза выносит мозг. Слова "модернизировать свой протокол" предполагают. что вы его сами разработали и уже написали. Если сами написали - то странно что не знаете как модернизировать....
другие? а какие вы уже изучили?
если с обоих сторон будут устройства одной архитектуры - например. два 8-битных МК АВР - на выравнивание можно забить
как говорится - "можно, но не нужно"
Как реализовать представляю. Но могут быть ньюансы. Ну и лень писать то, что уже до меня 10000 человек писали.
Я раньше читал по поводу обмена PC по RS232, 485, разбирал чужой код на эту тему. Но это было лет 10 назад уже мало что помню... Сейчас программирование всего лишь хобби.
По поводу архитектуры, то они у меня разные. Одна 8 бит, другая 32. Но я думал в них может отличаться только тип int, а выравнивание от компилятора зависит.
Ладно тогда буду использовать двухмерный массив.
Думаю, что "структура union" даже не скомпилируется.
У меня с первого раза редко компилируется :)
Вот это наверняка выправит байты в разных архитектурах.
Двумерный это круто. Вот только в основном разные протоколы через байты передаются. Хоть двухмерные хоть n-мерные. На передающей стороне передаваемые данные разбирают на байты, на приёмной собирают из байтов. Правила сборки-разборки-передачи называются протоколом. Пишешь 1 раз эти правила и потом не задумываешся как и что передавать,оно само как то срабатывает. И даже не зависит от выравнивания и размера int, если протокол правильно придуман.
Двумерный это круто. Вот только в основном разные протоколы через байты передаются. Хоть двухмерные хоть n-мерные. На передающей стороне передаваемые данные разбирают на байты, на приёмной собирают из байтов. Правила сборки-разборки-передачи называются протоколом. Пишешь 1 раз эти правила и потом не задумываешся как и что передавать,оно само как то срабатывает. И даже не зависит от выравнивания и размера int, если протокол правильно придуман.
Т.е. можно тупо написать что то типа?:
А дальше эти байты хоть на биты разбивай. Можно ведь еще битовые поля добавить вообще круто будет. И выравнивание не нужно будет. 4 байта я думаю уже не нужно выравнивать. Чтобы обратиться к биту достаточно будет написать: to_send.out1.byte1
У меня с первого раза редко компилируется :)
Не поддавайтесь гордыне и не считайте себя особо уникальным (по крайней мере, в этом) :)))
Чтобы обратиться к биту достаточно будет написать: to_send.out1.byte1
каша у вас в голове, не достаточно назвать номер квартиры что-бы вас доставили по нужному адресу, вернитесь в свои 10 лет назад - бит,байт, слово, двойное слово и т.д.
Чтобы обратиться к биту достаточно будет написать: to_send.out1.byte1
каша у вас в голове, не достаточно назвать номер квартиры что-бы вас доставили по нужному адресу, вернитесь в свои 10 лет назад - бит,байт, слово, двойное слово и т.д.
В интернете полно примеров, разберусь без труда, спасибо.