Отправка структур по Serial
- Войдите на сайт для отправки комментариев
Сб, 27/04/2019 - 22:12
Доброго времени суток. Озадачился таким вопросом как отправить струкутуру по Serial порту, нашел в интеренете пару статей, но только вот они не работают так функция write() ругается на то что я ей структуру передаю "no matching function for call to...". Есть ли у вас мысли по этому поводу?
Есть мысли, естественно. И способы.
write() у нас что ожидает на входе?
нашел в интеренете пару статей, но только вот они не работают так функция write() ругается на то что я ей структуру передаю
а в статьях что написано? неужели они структуры оператором write() передают?
Хммм
а если я знаю длину переменной типа структ, например там три штуки по байту
и говорю, что
Union
Byte array[3]
Mystruct
Где
Mystruct struct
byte1
byte2
byte3
А потом этот самый array вытряхиваю через write как буфер?
Прошу не пинать за синтаксис:) прошу комментировать чисса принцип. Сработает ли в принципе такая конструкция?
Прошу не пинать за синтаксис:) прошу комментировать чисса принцип. Сработает ли в принципе такая конструкция?
сработает конечно, почему нет? Побайтно можно и "Войну и мир" пекреслать - только медленно и лишних движений много.
Угу, все никак не соберусь попробовать. Прикупил тут fram по совету с хабра. Там есть готовые классы для записи/чтения, но они побайтные, а мне надо большую и разношерстную структуру часто сохранять. А переписывать некогда и лень.
все планирую упереться попробовать через юнион, как например сделал для записи в еепром еэспишки. Но там был юнион например четырех байтов и флоата, а тут юнион 85 байтов и структа.
и кстати, а чем медленно то? Вытряхнуть массив фором?
и кстати, а чем медленно то? Вытряхнуть массив фором?
ну может и не медленнее... пробовать надо
Не медленнее. И достаточно одного приведения типа вместо юниона.
А ето какЭто?
при имплементации протоколов на Си,очень удобно union'ами пользоваться как при наполнении массива данными,при парсинге принятого массива, так и при нормальном дебаггинге( с возможносью пошагово пускать код - но это не про родную "среду разработки" ардуино).и обязательно надо помнить про Endianess.
еще можно вместо структуры обьявить класс(не знаю насколько это ущербно или выгодно в вашем случае) в котором имплементировать фунцию char* <имя_класса>::Serialize() или char* <имя_класса>:: toString() , в котором и будет производиться сериализация полей(так правильно по русски?) класса в массив типа char*. а вывод данной функции "скармливать" функции Serial.write()
Короче:
пересылка структуры побайтово.
А если ещё учесть, что write() само умеет передавать sizeof() байт...
Да передауют структуру функцией write
И вот как передают
И вот как передают
Это вопрос или утверждение?
А если ещё учесть, что write() само умеет передавать sizeof() байт...
Ну да, унутре тоже циклом проходит. Тут главное - чтобы человек принцип увидел, пмсм. Остальное, конечно - есть в доке.
Утверждение
Вот кстати статья про FRAM
Попробовал просто в пример передать имя структуры переменной (структуры) нифига не вышло.
Потому что надо было указатель на структуру передавать, а не имя.
У массива имя вроде как и яаляется указателем , я предположил, что у структуры так же.
отсюда и попытка сделать юнион с массивом и передать имя массива, как в примере.
так получилось, что в далеком прошлом веке объектное программирование и применение указателей прошло мимо меня, я писал аппаратные приложения на паскале для испытательного оборудования и на ассемблере для бортового.
Во никак и не освою до сих пор :(
- Указатели и обьектно ориентированное программирование совершенно разные аещи.
- В Паскале указатели тоже есть.