проверил на ардуине леонарде - вот такая фигня Код (C++): void Tx() { for (byte i = 0; i < sizeof(dataTx); i++) { Serial.print(*((byte*)&dataTx + i)); } } присылает какую-то явную дичь, в которой адекватно присутствуют только переменные, а под видом String там фиг пойми что, скорее всего какой-то адрес. sizeof(dataTx) почему-то занимает 9 байт, из них последние три это переменные вот так заполнена структура Код (C++): dataTx.testStr="teststring"; dataTx.test = 0xFFFF; dataTx.crc = 0xFF; вот че присылается D7|1|A|0|A|0|FF|FF|FF| вывод - нефига всякие стринги в таких вещах ипользовать. создавай обычный массив постоянного размера (с запасом) и в него пихай строку
В нано считает правильно, а в есп не правильно. В вопросе кусок кода привел. В чем может быть ошибка?
Мне нужно передать идентификатор для нано, чтобы можно было подключать много разных приемников, а адресовать сообщение по уникальному идентификатору. Я его создаю по подобию есп - 6 бит HEX, которые хранятся в MySQL, откуда его забирает есп и по уарт отправляет в Лору, которая уже шлёт в эфир, модули принимают посылку и обрабатывают ее только если принятый id совпадает с записанным в eeprom. Тогда происходит расшифровка данных из пакета. Сейчас сделал всё через строку, ее просто парсю, но структурой было бы проще. Если удастся победить структуру, конечно.
В массиве же можно передавать только однотипные данные, а у меня есть текст, флаги, long и float. Разве можно все это передавать в одном массиве?
А есть какой-нибудь исходник как разобрать и потом собрать данные? Про crc я же написал как я делаю. На нано все работает, а вот есп постоянно даёт ошибку, код привел в вопросе.
можно и даже нужно. Только временно надо забыть про Всё перечисленное - есть последовательный набор байт. Вот их и передавай.
Можно все запихнуть в строку. Потом ее разбирать. Но структура же проще - там сразу можно передать данные которые потом не придется парсить. В нано все работает, а вот когда на есп переделал, то перестало. А как правильно сделать не знаю.
В вопросе кусок кода - беру структуру. Считают ее crc без последнего байта, куда потом пишу просчитанный crc. Потом считаю crc для структуры с записанным байтом - должен быть 0. В нано все правильно, в есп вместо ноля число.
Ну так их потом разбирать надо. Так я и делаю. Передаю массив символов, принимаю их в char, складываю в String, парсю. Если передавать структуру, то уходит процедура парсинга, что было бы удобнее. Для этого же и используют структуры, если я правильно понял их смысл - работа с разнотипными типами данных в единой обёртке. Так я и делал на нано. А вот с есп не получается. Сейчас сделал через массив, но хотел понять как можно сделать через структуру.
Да, так и делаю. Но нужно ее потом парсить. Структуру не нужно - минус действие, которое занимает место в памяти и машинного времени.
Извините не понял ваш вопрос. Я привел кусок кода, который пытаюсь отладить. Что-то в нем не так? Просто я его вырезал из скетча, может что-то не дописал.
Тоже приходу к такому выводу. Между нано все передается нормально, а вот между есп и нано - засада получается.
ты понимаешь, что структура существует только в твоей голове и только тогда, когда она записана в тексте редактора. Когда компилятор преобразует текст кода в машинный код, от структуры не остаётся и следа. При этом разные компиляторы преобразование структуры делают по-разному.
А если сделать так: Код (C++): #pragma pack(1) struct StrSend { String testStr; uint16_t test; uint8_t crc; }; #pragma pack() StrSend dataTx; На ESP тоже неправильно считать будет? Про String не пишу - уже все сказано, но в частном случае, (про CRC) - не принципиально.