Мне надо отправить пакет через лору. Максимальный пакет там 255 байт. Я тут облажался со строковой данной, вначале все через String делал, а потом оказалось что максимальная длина стринга равняется макимально свободному фрагменту памяти - и иногда там падает до 40-50 байт что вообще не прокатывает... В итоге я понял что надо создать массив char[255] куда бы я запихивал данные в бинарном виде для оптимизации. Так вот мне туда надо как то запихнуть и байты и интеджеры и лонги. Вот мне и интересно, как например в 100 позицию массива чаров запихнуть лонг
Комментарии: 59
Byte
Указатели, тайпкаст, да хоть memcpy.
Vasiliy
Условно говоря представитьч то 255 это размер памяти epprom, и там есть команда put которая пихает в определенную позицию в зависимости от входной переменной нужное число байт
Lexx
хочешь - наверни себе оберток под каждый тип, которые под капотом отсчитают смещение
Vasiliy
ну вот пока про это думаю, но зашел спросить может что готовое есть уже
Lexx
хотя не уверен что в маленьких процессорах такие хелперы - это правильно
Vasiliy
по любому это же распространенная задача
Lexx
а гугл что говорит, раз так? оно? https://forum.arduino.cc/index.php?topic=165243.0
Anonim
такой подход несколько рискован был у меня примерно такой код (сократим для общего понимания смысла): unsigned char BinData[ДовольноМного]; *(int*)(&(BinData[3]))=12345; На компе он нормально работал. А MIPS-овский проц в железке сказал "хер вам" и выдал исключение. Ему не понравилась попытка записи по невыровненному адресу
Vasiliy
Я без указателей делать буду
Anonim
Без указателя - это как?
Vasiliy
сразу объявлю массив на 255 символов и в первом байте будет размер лдя передачи
Anonim
Вы хотите впихнуть long, который по хорошему надо бы выровнить по 8 байт в 100-й элемент. если я ничего не путаю, 100 очень хреново делится на 8
Vasiliy
никто не сказал что все в лонгах будет
Lexx
с 100 по 103 байт от начала, я так понимаю
Vasiliy
там разные типы
Lexx
со статическим массивом похоже на правду, хз, я не сишник
Vasiliy
там будет последовательность команд (размера байт) и значений
Anonim
в любом случае, у вас будет запись по невыровненным адресам. Ну, если только вы не будете писать туда исключительно байтные типы
Vasiliy
условно говоря мне надо получить с аналоговой ножки A7 ее значение то есть будет условно параметр (44) сервер поймет что дальше идет 2 байта на интеджер просто например аптайм это лонг, значение цифрового выхода это байт а аналогового это инт. Вот мне надо в чар 255 байтный запихать эту последовательность Можно конечно вообще через EPPROM все готовить ;) но думаю быстро износится и если на клиенте еще фиг с ним, то на сервере точно когда сотни клиентов будут...
Anonim
так. То есть вы изобретаете какой-то явно костыльный велосипед при этом уверены что на сервере будут "сотни клиентов" А.. не подскажете, что конкретно вы изобретаете? Ну, так... ради интереса
Vasiliy
да ниче, обычная телеметрия
Lexx
protobuf у него получается =) но не совсем
Anonim
не совсем... protobuf всё-таки чуть умнее
Vasiliy
управление шлагбаумами - с получением их состояния, управление всякими подвалами домов с получением температуры влажности и прочего в одном микрорайоне
Lexx
а можно как-то зафиксировать структуру пакета хоть бы в зависимости от типа? в заголовке тип пакета, в сообщениии массив байт который декодируется в зависимости от
Vasiliy
да на самом деле все нормально уже работало в стрингах... вообще все по красоте надежно. но вот когда захотел получить чуть больше данных за раз - вылезла такая лажа так еще раз я грю там формат такой: (байт-либо команда если от сервера, либо номер какого то параметра если от клиента)(значение этого параметра разного типа) все. че там особо мудрить то
Andrey
заведи структуру, их для этого и придумали
Vasiliy
да все уже. так и сделал ) ну почти. плавающая стурктура. Если жестко структуру задавать то лишние байты придется гонять. а для лорки лишний байт даже это миллисекунды
Andrey
так унифицируй данные.
Roman
лораводы должны страдать. с учетом того, что лора работает хорошо только на открытом пространстве а он трясется над байтами
Andrey
у меня она хорошо работала в застройке, с уровня земли.
Vasiliy
нуну.. у меня в городе в плотной застройке 2км проибвает
Byte
Не надо.
Vasiliy
прямо через дома
Roman
пока не поймали
Vasiliy
Доброе утро - так то лора разрешена
Roman
частоту назови и адрес
Vasiliy
гугли
Roman
адрес физический, улица дом
Vasiliy
тоже гугли
Andrey
перед этим почитай про ISM
Roman
я уже читал и про лору и про не лору, хуета это все
Andrey
может ты просто читатель тот еще?
Roman
да нахуй она нужна и на 433 и на 846 забитые каналы пиликалками
Andrey
я когда читал даташиты тоже немного мозги кипели. а потом я опытным путем получил минусовой SNR и задумался.
Roman
антена размером с коня нужна на кой шлагбаумам радио?
Andrey
я смотрю и в антеннах ты не шибко сведущ...
Roman
около 10см антена это уже конь. блютус честно 80 метров в прямой видимости с милипизерной дорожкой и норм
Andrey
не, ну так-то все от задач. если надо чтоб оно из кармана на 50км работало, то вам в другую галактику, в этой физика не позволяет.
Byte
Ага, угу… (включает микроволновку)
Roman
шлагбауму нафейхуя еще и ретранслятор на лоре? причем на той же частоте что и брелки от этих ворот читер
Andrey
спроси у повелителя шлагбаумов, я другим занимался.
Roman
я таксистам не доверяю хочешь сказать микроволновка работает на 2.4ггц? бло 2.45ггц
Byte
Ага.
Roman
шапочка из фольги нужна для лучшего пропекания линза прямо в мозжечок падажи, то есть магнетрон можно использовать как несущую для блюпупа?) микроволновка с блютусом, фак еа
Byte
Ну если придумаешь, как модулировать… :)
Anonim
Запрос в Гугле "БТ наушники из микроволновки своими руками"
Roman
усука это ты ему скажи а ну да, ты уже говорил.