Товарищи я плохо знаю си еще и у меня есть вопрос. Я получаю данные с uart buf_uart= b"S/P1/S0/T/09999/00/{crc8}"/ И хоу написать парсер чтобы получать эти данные и разпихивать по переменным. Я напиал парсер с помощью функции strtok но у меня программа в размерах сразу выросла с 8кб до 60 кб. И я бы хотел ка кто подругому это сделать. И вопрос как вобще правильно можно спарсить такие простые данные . Или быть может лучьше как то по другому правильно слать настройки. Я пока придумал что нужно написать функцию которая принемает: -буфер buff_mY куда складывать данные -позицию с которой надо считывать -длину сколько надо считать. потом просто пишу длинный парсер где в разных ifах буду буду считывать разные части пришедшего буфера buf_uart и сравнивать с помощью функции strcmp полученные даанные в buff_mY со строкой какойнитьтипа if(strcmp(*buf_uart,"P1")=='P1')

Комментарии: 18

  1. Denis

    ожидаемые данные знаешь? глянь function strstr

  2. Cyberzx

    Не понятно, зачем тут вообще что-то парсить. Просто опиши структуру, которую хочешь считывать и делай туда memcpy

    • Anonim

      а как )) я незнаю))

      • Denis

        я так понял надо делать,что типа, мы получили P1 делаем это,если P2 то это

        • Anonim

          да я с компа на п итоне их буду делать и слать , там в строке настройки времени должны быть да плюс там еще есть время T и включить выключить S1 и S0

          • Denis

            я работал с sim900 с помощью описанной выше функции

            • Cyberzx

              struct { uint8_t data1; uint8_t data2; uint16_t data3; } time_settings; memcpy(&time_settings, buffer, sizeof(time_settings)); у тебя же статический бинарный блок. его парсить не надо

              • Denis

                ждал ответов,которые нужны мне были от модуля для перехода на следующий шаг, в том числе со сбросом по таймауту

              • Anonim

                тааак вот тут я не понл

              • Denis

                и потом ему все данные проверять?

                • Cyberzx

                  да.

                  • Denis

                    ну не знаю,каждый свой путь выбирает,у меня это strstr было

                    • Anonim

                      если коротко со стороны коммпа на микроконтроллер должны слаться данные , я пока придумал вот такую структуру данных b"S/P1/S0/T/09999/00/{crc8}"/ где S значит записать P это пин S это состояение(вклбчить.выключить) T это врем через сколько это сделать

                      • Cyberzx

                        strstr тут вообще не годится

                        • Anonim

                          также там еще методов 30 должно быть но это потом как пойму что я не так делаю

                          • Cyberzx

                            и даже дело не в том, что он потянет за собой половину libc в линковке. а в том, что ты работаешь не с asciiz строками, а с бинарными данными из uart

                            • Denis

                              так если байты фисированы сразу их и проверяй если ты знаешь что первый байт это вкл отл устройство, зачем мороки?

              • Anonim

                интрига есди можно то эт оч упрощает жизнь а вот этим пользоваться чтобы записать да ?

Не нашли ответ?

Вам также может быть интересно