JSMN a minimalistic JSON parser in C

Nov 03, 2019 14:56

Нашёл библиотеку JSMN для чтения JSON из C. Маленькая, не требует libc, может работать со статическим выделением памяти, прекрасный вариант для Cortex-M микроконтроллеров. Теперь буду использовать для хранения иерархической конфигурации. Если важна очерёдность, то данные можно хранить в JSON массивах, при чтении она будет соблюдаться. Пробовал ( Read more... )

electro, mcu

Leave a comment

Comments 5

aterentiev November 3 2019, 17:01:36 UTC
Может быть, вопрос покажется дурацким, но зачем в МК вообще json? Почему не хранить данные в простых структурах, зачем лишние сущности?

Reply

electrodyssey November 3 2019, 20:56:22 UTC
Я тоже так подумал сначала, но вот, к примеру есть набор температурных профилей для прожарки, в каждом профиле по нескольку фаз, каждая фаза включает в себя набор параметров для PID, температуру, длительность и.т.п. Теперь представляем что конфиг надо хранить внутри flash памяти и временами загружать с компьютера через usb или ещё что-то другое и нужна сериализация соответственно, потому что хранить или передавать структурированные данные в бинарном формате жутко неудобно, ведь обращение к flash будет фиксированного размера, byte или word. Придумывать свой стандарт для сериализации неохота, тем более неохота реализовывать универсальный парсер для структурированных данных, который тема отдельного проекта для умных ребят! И тут, какое счастье что Serge Zaitsev сделал (тут барабанная дробь.. ) такую маленькую миленькую библиотеку для токенизации JSON, которая без проблем пашет на МК и позволяет менять формат иерархических структур без сильного напряга. Вот пожалуй мой набор аргументов в пользу JSON для хранения конфигурации, мне просто ( ... )

Reply

electrodyssey November 3 2019, 20:57:04 UTC
И ещё JSMN читается как jasmine, а мне нравятся жасмины!

Reply


pishik November 9 2019, 03:21:32 UTC
Если у тебя статический набор данных то можешь запросто использовать сишные структуры и fread() /fwrite(). Обе функции могут принять указатель на структуру. Можешь вообще запаковать эту структуру для экономии. fread()/fwrite() сам за тебя сериализирует в зависимости от big/little endian. Одна проблема, кроссплатформенность пострадает (при переходе с одно endiannes на другой).

Другой минус JSON библиотечки в том, что она будет дополнительно расходовать оперативку чипа (я полагаю она статично впилена в твоей фирмвейр и выгружается в оперативку при старте) ? А fread/fwrite наверное уже включен в твой фирмвейр ?

Reply

electrodyssey November 9 2019, 09:42:12 UTC
момент в том что fwrite и fread нет, как и файловой системы, есть только flash куда можно писать байтами, вордами или двордами. Ну и потом надо передавать эти данные через usb, а значит нужна сериализация и всем этим заниматься неохота ) а библиотека статично линкуется кушает рам, но немного

Reply


Leave a comment

Up