Передача структуры

Тема в разделе "ESP8266, ESP32", создана пользователем GeoShu, 27 дек 2021.

  1. akl

    akl Гуру

    проверил на ардуине леонарде - вот такая фигня
    Код (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|

    вывод - нефига всякие стринги в таких вещах ипользовать. создавай обычный массив постоянного размера (с запасом) и в него пихай строку
     
    GeoShu нравится это.
  2. GeoShu

    GeoShu Гик

    В нано считает правильно, а в есп не правильно. В вопросе кусок кода привел. В чем может быть ошибка?
     
  3. GeoShu

    GeoShu Гик

    Так в этом и вопрос. Что не так?
     
  4. GeoShu

    GeoShu Гик

    Мне нужно передать идентификатор для нано, чтобы можно было подключать много разных приемников, а адресовать сообщение по уникальному идентификатору. Я его создаю по подобию есп - 6 бит HEX, которые хранятся в MySQL, откуда его забирает есп и по уарт отправляет в Лору, которая уже шлёт в эфир, модули принимают посылку и обрабатывают ее только если принятый id совпадает с записанным в eeprom. Тогда происходит расшифровка данных из пакета. Сейчас сделал всё через строку, ее просто парсю, но структурой было бы проще. Если удастся победить структуру, конечно.
     
  5. GeoShu

    GeoShu Гик

    В массиве же можно передавать только однотипные данные, а у меня есть текст, флаги, long и float. Разве можно все это передавать в одном массиве?
     
  6. parovoZZ

    parovoZZ Гуру

    а можно пример, где описаны поля структуры, а не пакета?
     
  7. GeoShu

    GeoShu Гик

    А есть какой-нибудь исходник как разобрать и потом собрать данные?
    Про crc я же написал как я делаю. На нано все работает, а вот есп постоянно даёт ошибку, код привел в вопросе.
     
  8. GeoShu

    GeoShu Гик

    Так нашел. В нано считает, а есп нет. Код в вопросе привел. Что с ним может быть не так?
     
  9. SergeiL

    SergeiL Оракул Модератор

    А что считает в нано так, а в ESP не так?
    Что должно быть то?
     
  10. parovoZZ

    parovoZZ Гуру

    можно и даже нужно. Только временно надо забыть про
    Всё перечисленное - есть последовательный набор байт. Вот их и передавай.
     
  11. GeoShu

    GeoShu Гик

    Можно все запихнуть в строку. Потом ее разбирать. Но структура же проще - там сразу можно передать данные которые потом не придется парсить. В нано все работает, а вот когда на есп переделал, то перестало. А как правильно сделать не знаю.
     
  12. GeoShu

    GeoShu Гик

    В вопросе кусок кода - беру структуру. Считают ее crc без последнего байта, куда потом пишу просчитанный crc. Потом считаю crc для структуры с записанным байтом - должен быть 0. В нано все правильно, в есп вместо ноля число.
     
  13. akl

    akl Гуру

    в структуру надо запихнуть строку - но не String, а char*
     
  14. GeoShu

    GeoShu Гик

    Ну так их потом разбирать надо. Так я и делаю. Передаю массив символов, принимаю их в char, складываю в String, парсю. Если передавать структуру, то уходит процедура парсинга, что было бы удобнее. Для этого же и используют структуры, если я правильно понял их смысл - работа с разнотипными типами данных в единой обёртке. Так я и делал на нано. А вот с есп не получается. Сейчас сделал через массив, но хотел понять как можно сделать через структуру.
     
  15. GeoShu

    GeoShu Гик

    Да, так и делаю. Но нужно ее потом парсить. Структуру не нужно - минус действие, которое занимает место в памяти и машинного времени.
     
  16. GeoShu

    GeoShu Гик

    Извините не понял ваш вопрос. Я привел кусок кода, который пытаюсь отладить. Что-то в нем не так? Просто я его вырезал из скетча, может что-то не дописал.
     
  17. parovoZZ

    parovoZZ Гуру

    зачем?

    для передачи данных по внешним каналам связи совсем не проще.
     
  18. GeoShu

    GeoShu Гик

    Тоже приходу к такому выводу. Между нано все передается нормально, а вот между есп и нано - засада получается.
     
  19. parovoZZ

    parovoZZ Гуру

    ты понимаешь, что структура существует только в твоей голове и только тогда, когда она записана в тексте редактора. Когда компилятор преобразует текст кода в машинный код, от структуры не остаётся и следа. При этом разные компиляторы преобразование структуры делают по-разному.
     
  20. SergeiL

    SergeiL Оракул Модератор

    А если сделать так:
    Код (C++):
    #pragma pack(1)
    struct StrSend {
      String testStr;
      uint16_t test;
      uint8_t  crc;
    };
    #pragma pack()
    StrSend dataTx;
    На ESP тоже неправильно считать будет? Про String не пишу - уже все сказано, но в частном случае, (про CRC) - не принципиально.