Прочтите это сегодня опубликовать в Geektimes , и я хочу поделиться своим опытом.
Я не хочу обсуждать плюсы и минусы Arduino, но условия проекта, в котором я применил то, что описано ниже, должны быть для этого созданы.
Суть в том, что нужно предоставить пользователю терминал для управления устройством.
Соответственно, не малая часть работы — это работа со струнами.
Пусть каждый сам решает, применять предложенное решение или нет. Я решил отказаться от класса String: ошибка линкер.
Это появилось у меня только тогда, когда я попытался использовать класс String. Что требовалось? Отображение информации и обработка строк, введенных пользователем.
Например:
Ethernet-контроллер — ок СТАТИЧЕСКИЙ режим > время 2015-11-16 22:35:27Вообще-то надо стоки сравнивать.
Нет, сначала нужно разбить текст на фрагменты разделителем (например, пробелом), а потом еще сравнить строки.
Поскольку команды были «раз, два — и всё», я убрал разбивку текста на фрагменты.
Из-за вышеуказанной ошибки невозможно было использовать класс String, как можно сделать по-другому? Arduino использует библиотеку AVR-libc , то имеет смысл сначала обратиться к нему.
Что у нас есть?
- stdlib.h — функции взаимного преобразования чисел и строк (в обоих направлениях).
- строка.
h
— функции для работы со строками.Наш главный интерес.
- stdio.h — стандартные функции ввода/вывода.
Упоминается что-то, что связано с задачей.
Итак, рекомендую для ознакомления №1 - вдруг пригодится где-нибудь отдельно.
Сам по себе он используется только для работы.
строка.
h .
№2 – использовать функции Мемсет заполнить или очистить буфер, мемкмп - для сравнения.
стркмп Я его не использую, потому что мне нужно явно ограничить длину сравниваемого фрагмента.
№3 – для чтения и вывода формата: спринтф , спринт_П , sscanf , sscanf_P .
Функции с суффиксом _П отличаются тем, что строка формата берется из памяти программы PROGMEM, также известной как макрос Ф() в библиотеках Arduino. Кстати Кстати, если полностью реализовать функции ввода-вывода одного символа получить И putc , то вы получите стандартные потоки ввода, вывода, ошибок и файлов, если они у вас есть.
Часто можно обойтись переопределением макросов путчар() И getchar() , работающий со стандартным вводом и выводом.
Мое сравнение строк выглядит так:
Пожалуй, стоит упомянуть, что начала строк сравниваются.if ( memcmp(str ,"statlist" ,8)==0 ) { // your code here }
Для поиска фрагментов вы можете использовать меммем .
струны для C струны для C ул.
, они есть символ * - это ссылка на начало последовательности голец , последнее из которых имеет значение 0x00 .
Это означает, что их нужно где-то разместить.
Например, в массиве.
Или используйте маллок , каллок , бесплатно .
Что мешает вам совершать ошибки, значит перекладывание ответственности на программиста за их размещение и контроль длины .
То есть поиск команды может выглядеть так: if ( memcmp(str ,"statclear", 9)==0 ) {
Теги: #парсинг #разработка на Arduino
-
Рекомендации После Установки Ubuntu 16.10
19 Oct, 24 -
Светодиодная Лента И Другие Виды Освещения
19 Oct, 24 -
Люди Против Pvs-Studio: Первый Дубль
19 Oct, 24 -
Русская Изобретательность
19 Oct, 24