На Основе «Обработка Строк На Arduino»

Прочтите это сегодня опубликовать в Geektimes , и я хочу поделиться своим опытом.

Я не хочу обсуждать плюсы и минусы Arduino, но условия проекта, в котором я применил то, что описано ниже, должны быть для этого созданы.

Суть в том, что нужно предоставить пользователю терминал для управления устройством.

Соответственно, не малая часть работы — это работа со струнами.

Пусть каждый сам решает, применять предложенное решение или нет. Я решил отказаться от класса String: ошибка линкер.

Это появилось у меня только тогда, когда я попытался использовать класс String. Что требовалось? Отображение информации и обработка строк, введенных пользователем.

Например:

Ethernet-контроллер — ок СТАТИЧЕСКИЙ режим > время 2015-11-16 22:35:27
Вообще-то надо стоки сравнивать.

Нет, сначала нужно разбить текст на фрагменты разделителем (например, пробелом), а потом еще сравнить строки.

Поскольку команды были «раз, два — и всё», я убрал разбивку текста на фрагменты.

Из-за вышеуказанной ошибки невозможно было использовать класс String, как можно сделать по-другому? Arduino использует библиотеку AVR-libc , то имеет смысл сначала обратиться к нему.

Что у нас есть?

  1. stdlib.h — функции взаимного преобразования чисел и строк (в обоих направлениях).

  2. строка.

    h — функции для работы со строками.

    Наш главный интерес.

  3. 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

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.