Товарищи я плохо знаю си еще и у меня есть вопрос. Я получаю данные с 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
Denis
ожидаемые данные знаешь? глянь function strstr
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
интрига есди можно то эт оч упрощает жизнь а вот этим пользоваться чтобы записать да ?