![]() -4 / 24 / 7
Регистрация: 16.12.2016
Сообщений: 716
|
|||||||||||
Как писать парсер строки под дуино?24.10.2017, 05:35. Показов 1651. Ответов 19
Метки нет Все метки)
(
где можно почитать о создании парсера именно для мк ардуино? ну там же память надо экономить туда сюда... не хочу чтобы он занимал более 20%
парсить буду ответ смарт карты в формате TLV тоесть из вот такого
на что в первую очередь обратить внимание? посоветуйте статьи и публикации на тему парсеров под ардуино.
0
|
24.10.2017, 05:35 | |
Ответы с готовыми решениями:
19
Как писать сложный парсер? Как писать под RockBox? Как писать под windows? |
techpriest
![]() 634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
|
|
24.10.2017, 11:14 | |
Как правило такая задача решается построением автомата состояний. То есть вы в зависимости от предшествующего ввода меняете состояние своего автомата и соответствующим образом интерпретируете следующий байт. В базовом виде, без украшательств, получается длинный switch-case-if-else-goto... Есть более академические подходы к построению парсеров, но тут они избыточны.
Добавлено через 26 минут Собственно, такой автомат побайтно получает данные и в зависимости от них изменяет своё состояние.
1
|
![]() 58 / 34 / 8
Регистрация: 08.07.2011
Сообщений: 235
|
|
26.10.2017, 08:03 | |
SadiQ228, вообще есть куча решений, начиная от регулярок и заканчивая собственными велосипедами.
Начинать надо с того, что у вас все таки строка имеет статичный размер или нет? Грубо говоря первый и 3й байт всегда останутся на своем месте и например 15й или все таки после 3го байта может быть менее 14 байт? Если все статично, то в чем вообще проблема выделить свои буфера статичные под эту строку и дергать уже в каждый буфер инфу по своим индексам? Если же происходит сдвиг всех идентификаторов в зависимости от размера информации, то придется вылавливать по всей строке эти идентификаторы и то что следует за ними.
0
|
![]() ![]() |
||||
27.10.2017, 16:23 | ||||
Добавлено через 2 минуты
0
|
![]() 58 / 34 / 8
Регистрация: 08.07.2011
Сообщений: 235
|
||||||||
27.10.2017, 19:28 | ||||||||
У тебя в любом случае Я парсил PDUS формат GSM модема, получается что то типа такого - создал структуру и в нее пихаешь данные, а индексы твои это разделители.
1
|
![]() 8 / 8 / 2
Регистрация: 01.10.2017
Сообщений: 49
|
||||||
01.11.2017, 20:26 | ||||||
По хорошему - надо сделать struct и заполнять уже его. Но в силу ограниченности ресурсов - проще в цикле читать данные из консоли и обрабатывать их по мере поступления.
Скажем, формат такой:
Тоесть читаем через Serial.read() по 3 символа, первые два конвертиуем в число через atoi(), получаем тип данных (Строка), читаем снова 3 символа, первые 2 конвертим в число, получаем длинну (14). Создаем char *string и считываем 14 раз по 3 байта, ковертируя первые 2 в сивол (*string = convertedChar; *string++). Последним будет NULL (0x00) - тоесть конец строки. (Тут оговорка - можно было бы читать до NULL, тогда и байт длины строки не нужен. Но это уже другая история). Кажысь все верно расписал. Хотя и без кода.
1
|
![]() -4 / 24 / 7
Регистрация: 16.12.2016
Сообщений: 716
|
||
03.11.2017, 00:04 [ТС] | ||
друг подскажи у меня Тэгов около ста штук.... плюс еще и их имена.... типо вот такие ....как в примере:
0
|
![]() 8 / 8 / 2
Регистрация: 01.10.2017
Сообщений: 49
|
||||||||||||||||
03.11.2017, 00:54 | ||||||||||||||||
Далее делаем массив, сохраненный в флеш-памяти (eeprom):
... Пишу по памяти, может немного ошибся...
1
|
![]() -4 / 24 / 7
Регистрация: 16.12.2016
Сообщений: 716
|
|||||||||||
04.11.2017, 18:01 [ТС] | |||||||||||
а вот еще такой вопросик как лучше организовать приставку следующего бита?
объясняю:
привожу пример:
как бы решить такое объединение байтов? сижу вот думаю чет на ум не приходит ничего
0
|
![]() 8 / 8 / 2
Регистрация: 01.10.2017
Сообщений: 49
|
||||||
04.11.2017, 20:37 | ||||||
Поправлю код:
1
|
Модератор
![]() 8962 / 6728 / 921
Регистрация: 14.02.2011
Сообщений: 23,752
|
|||||||
04.11.2017, 21:13 | |||||||
и тогда если возникнет нужда поменять тип массива с int на char или float не надо будет по всему листингу править
1
|
![]() 8 / 8 / 2
Регистрация: 01.10.2017
Сообщений: 49
|
||
05.11.2017, 09:43 | ||
Соответственно, если гдето используется switch-case со значениями из enum - то все эти значения будут в оперативной памяти, а не на флеше (Памяти программы / eeprom). По этому и приходится всячески извращаться...
1
|
![]() -4 / 24 / 7
Регистрация: 16.12.2016
Сообщений: 716
|
|
12.11.2017, 03:45 [ТС] | |
дабы не плодить новых тем хочу спросить следующее: а как засечь в ms время выполнения функции на ардуино? вот я получил строку, у меня есть рабочая ( таки да) функция которая раскладывает строку... и как засечь сколько времени нужно моей функции от получения строки до полного разбора ее по пакетам?
0
|
techpriest
![]() 634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
|
|
12.11.2017, 08:06 | |
Перед вызовом функции с помощью функции micros() снимаете время в микросекундах. По выходу их функции снимаете отметку второй раз. Разница между отметками и есть интервал времени (с точностью до затрат на снятие меток)
Если функция выполняется слишком быстро, то единичный прогон может быть малоинформативен. Тогда делаем снимаем интервал над выполнением цикла из 100-1000 выполнений функции.
1
|
12.11.2017, 08:06 | ||||||
Помогаю со студенческими работами здесь
20
Как писать плугины на С++ под RRose? Как начать писать под iOS? Как писать в python 3 под java? Как писать под Android в Eclipse?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Параллельное программирование с OpenMP в C++
NullReferenced 24.04.2025
Параллельное программирование — подход к созданию программ, когда одна задача разбивается на несколько подзадач, которые могут выполняться одновременно. Оно стало необходимым навыком для. . .
|
Цепочки методов в C# с Fluent API
UnmanagedCoder 24.04.2025
Современное программирование — это не только решение функциональных задач, но и создание кода, который удобно поддерживать, расширять и читать. Цепочки методов и Fluent-синтаксис в C# стали мощным. . .
|
Мульти-тенантные БД с PostgreSQL Row Security
Codd 23.04.2025
Современные облачные сервисы и бизнес-приложения всё чаще обслуживают множество клиентов в рамках единой программной инфраструктуры. Эта архитектурная модель, известная как мульти-тенантность, стала. . .
|
Реализация конвейеров машинного обучения с Python и Scikit-learn
AI_Generated 23.04.2025
Мир данных вокруг нас растёт с каждым днём, и умение эффективно обрабатывать информацию стало необходимым навыком. Специалисты по машинному обучению ежедневно сталкиваются с задачами предобработки. . .
|
Контроллеры Kubernetes Ingress: Сравнительный анализ
Mr. Docker 23.04.2025
В Kubernetes управление входящим трафиком представляет собой одну из ключевых задач при построении масштабируемых и отказоустойчивых приложений. Ingress — это API-объект, который служит вратами. . .
|
Оптимизация кода Python с Cython и Numba
py-thonny 23.04.2025
Python прочно обосновался в топе языков программирования благодаря своей простоте и гибкости. Разработчики любят его за читабельность кода и богатую экосистему библиотек. Но у этой медали есть и. . .
|
Микросервис на Python с FastAPI и Docker
ArchitectMsa 23.04.2025
В эпоху облачных вычислений и растущей сложности программных продуктов классическая монолитная архитектура всё чаще уступает место новым подходам. Микросервисная архитектура становится фаворитом. . .
|
Создаем веб-приложение на Vue.js и Laravel
Reangularity 23.04.2025
Выбор правильного технологического стека определяет успех веб-проекта. Laravel и Vue. js формируют отличную комбинацию для создания современных приложений. Laravel — это PHP-фреймворк с элегантным. . .
|
Максимальная производительность C#: Span<T> и Memory<T>
stackOverflow 22.04.2025
Мир высоконагруженных приложений безжалостен к неэффективному коду. Каждая миллисекунда на счету, каждый выделенный байт памяти может стать причиной падения производительности. Разработчики на C#. . .
|
JWT аутентификация в Java
Javaican 21.04.2025
JWT (JSON Web Token) представляет собой открытый стандарт (RFC 7519), который определяет компактный и самодостаточный способ передачи информации между сторонами в виде JSON-объекта. Эта информация. . .
|