Василий
но это совершенно пофиг
SetPf
__T_NC_COMM_SETUP это же тип? Или это все таки переменная?
Василий
тип описывающий структуру
SetPf
ок а как берется значения по указателю из типа структуры? И потом побитовое и с значением?
SetPf
Я просто вижу если упростить
typedef struct { } struct_t;
int variable = 0;
*(struct_t*) & variable = 1;
Василий
пойми сам принцип - дальше оптимизируй до посинения
SetPf
вот да.
Я не понимаю как вы из типа - берете значение по указателю.
SetPf
*(__T_NC_COMM_SETUP*)
вот сюда.
SetPf
У вас может структура не через тайпдеф определена и это так работает? (я всю жизнь через тайпдефы делаю и никогда не интересовался как иначе).
Василий
то там же написано
SetPf
Через тайпдеф. Мне такое компилятор зарубит.
Т.к. __T_NC_COMM_SETUP это тип, а не экземпляр типа.
Василий
с какого перепугу?
Василий
это условность - ниначто не влияющая
SetPf
Причем тут андерскоры и имя вообще =).
Василий
я не пойму в чем сложность?
SetPf
Если я не не знаю чего-то невообразимо важного в С.
То, если абстрагировать от частного случая, там написано:
*(int*) & somevariable_1 = somevariable_2;
SetPf
Я помощь зала запрашиваю, у меня стойкое ощущение, что я чего-то в лоб не вижу.
Василий
*(__T_NC_COMM_SETUP*)&RS_485_OUT_Buf[RS_485_OUT_Len] = NC_COMM_SETUP; //
разжовываю
&RS_485_OUT_Buf[RS_485_OUT_Len] - разадресация переменной, в часности буфера с указанным индексом
*(__T_NC_COMM_SETUP*) - присвоение типа тому что разедресовали - типу структуры
= NC_COMM_SETUP; - и ложим туда данные которые в NC_COMM_SETUP
Василий
т.е. в буфер положили данные структуры
SetPf
Да я тупой =) Я смотрю и вижу побитовое И =)
Василий
да Си он такой
SetPf
Не я обычно просто все в 5 строк делаю чем одну.
SetPf
Не вижу смысла жать. Потом с чтением проблемы.
Василий
вообщем это можно и по одному байту переложить - но если компилятор умеет - то нафига мучаться
Василий
при приеме после проверки црц обратное действие и у тебя данные из пакета уже в втруктуре
SetPf
Код.
SetPf
Но это вкусовщина.
Василий
Но это вкусовщина.
одно действие пишется в строку, накой его еще раскладывать по строкам
Василий
и так кода тысящи строк
Василий
и я никого не призываю писать как я, мне так удобно я так пишу
SetPf
SetPf
Это вроде стандартная фигня.
SetPf
Во всяком случае много где видал.
SetPf
S32 не видел, U8 точно видел =)
Serg
Можно ещё void переименовать в VD, например
Василий
та можно что угодно - лишь бы удобно было
ну и не переборщить ))
Serg
Та куда уж )
Василий
ну то ты понял принцип работы - или будем обсуждать скобки ?
SetPf
Василий
то я же в самом начале скинул
SetPf
Нет, парс приема на полезную нагрузку.
Василий
да собственно
if (flag_ZAPROS == 1) // Флаг устройство получило запрос
{
if ((DALLAS_CRC8(RS_485_IN_Buf, posIn_RS_485_IN_Buf))==0) // CRC
{
и тут уже смотрим код команды и куда переложить пакет
SetPf
Из кода отправки не очень понятно __T_NC_COMM_SETUP это структура с заголовками каким, который в конце данных прикрепляется.
Или прям целиковый пакет с данными уже.
Василий
ну добавьте в начале заголовок если нужно, у меня первый байт - код команды, второй адрес RS-485
SetPf
Не, я к тому, что NC_COMM_SETUP уже содержит полезную нагрузку.
Василий
т.е. в буфер ложим
RS_485_OUT_Buf[0] = kod_READ_PARAM;
RS_485_OUT_Buf[1] = ADDRESS; //
а дальше нагрузку полезную
SetPf
RS_485_OUT_Len изначальная то мне неизвестна. Может там уже напихана нагрузка, а сверху ставится кому и куда.
Василий
"У вас получается фиксированной длинны? "
для этой команды - такая длина, для другой может быть другая
Василий
не имеет значения
Василий
есть флаг когда пакет принят - от него и пляшем
Василий
ну и понятно что другой МК должен знать этот пакет
Василий
да и в принципе не важно - может и не знать, например - обновление прошивки через RS-485
SetPf
Да, не понять мне С-пути видимо.
Вроде смотришь - простейше, безотказно, но блин вморожено в текущую задачу с головой.
Меня слишком промыли повторным использованием =)
Василий
используй хоть миллион раз - работает и работает
Василий
не бывает ничего универсального - все равно надо допиливать под задачу
SetPf
Ну я развожу жаваскрипт на С =) С ООП, конфигурацией во время инициализации, что бы вообще к железу не было привязано.
Сейчас вот посмотрел на ваши 20 строк и на свои 400. Думаю - может я все таки че-то упускаю =)
Василий
метод конечно для видео - обмена не катит, но для обмена данными по юарт/rs-485 - очень даже неплох
Василий
Василий
а на ESP32 не мигрировало )))))))))
уже пол года лежит - времени нет ))
но куда он денется ))
SetPf
У меня вчера - пожелание было, что бы на входе\выходе был поток байт.
SetPf
Без конкретной привязки к размеру посылки. Но вот ща думаю, можно примерно тем же способом и его в принципе слать, просто уровнем выше собирать.
Василий
добавляем очередь - и вуаля - "тепленькая пошла" - поток
Василий
Василий
задача связи двух МК(и даже более) - решается
SetPf
Ну вот не подумал, что любой размер можно попросту выше уровнем собирать =)
Василий
угу
Dmitry
Dmitry
Dmitry
Null
https://summit.iridi.com/
Null
Запись первого дня 19 октября
https://youtu.be/vpS-czfa4nQ?list=PLfS9mpIz-NfYfXI0G4Jwx2y9eC425Sy0p
Anonymous
Оформляйте в моноспейс, читать удобней будет
*(__T_NC_COMM_SETUP*)&RS_485_OUT_Buf[RS_485_OUT_Len] = NC_COMM_SETUP; // перекидываем данные
RS_485_OUT_Len = RS_485_OUT_Len + sizeof(__T_NC_COMM_SETUP); //
RS_485_OUT_Buf[RS_485_OUT_Len] = DALLAS_CRC8(RS_485_OUT_Buf, RS_485_OUT_Len); // CRC
RS_485_OUT_Len++; // +1 байт CRC
RS_485_TX_len(RS_485_OUT_Buf, RS_485_OUT_Len); //
ВПК ПОТОК
Очень долгое видео, но интересно посмотреть куда идет направление. а толкают его на безпроводные технологии.
Resident
Для исходных файлов C++ IntelliSenseMode был изменен с "clang-x64" на "gcc-x64" на основе аргументов компилятора и compilerPath при каждом запуске VSCode откуда это вообще прилетело ? )
Denis
romanetz
Anonymous
Еще момент с протоколом.
Помехи на линии в промежутке между пакетами будут восприниматься приемником как начало приема пакета с сбоем приема следующего пакета.
Можно делать заголовок пакета и распознавать его для сброса ошибочных посылок