Arduino:Библиотеки/PString: различия между версиями
Нет описания правки |
Myagkij (обсуждение | вклад) Нет описания правки |
||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=Класс PString<ref>[http://arduiniana.org/libraries/PString arduiniana.org - PString]</ref>= | =Класс PString<ref>[http://arduiniana.org/libraries/PString arduiniana.org - PString]</ref>= | ||
Версия от 12:27, 20 мая 2023
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Класс PString[1]
Когда вышла Arduino 0012, вместе с нею был внедрен и класс Print, и для того, чтобы воспользоваться его возможностями, были написано множество библиотек, включая HardwareSerial, LiquidCrystal, Ethernet Client/Server и NewSoftSerial. Однако если вам нужно вывести отформатированный текст на устройства, для которых подобные библиотеки пока не написаны, то здесь придется либо писать специальный код, либо обращаться к ресурсоемким альтернативным решениям вроде sprint().
Специально для таких случаев была написан класс PString (означает «Print-to-String», т.е. «из Print в String»). В ее основе лежит строковый класс PString (наследующий у класса Print), который рендерит текст в символьный буфер. Благодаря объектам Pstring вы можете использовать текстовый движок Print на любом устройстве, даже если он не поддерживает напрямую текст в формате класса Print, а в первую очередь просто «печатает» строку.
Самое простейшее применение – это воспользоваться объектом PString, чтобы просто отформатировать текст:
char buffer[30];
#define pi 3.14159
PString(buffer, sizeof(buffer), pi);
Этот код использует функционал Print, который затрагивает обработку чисел с плавающей точкой. Он генерирует строковый эквивалент константы pi, сохраняя ее в buffer.
Поскольку PString наследует у Print, объекты PString могут делать то же, что и объект Print:
char buffer[50];
PString mystring(buffer, sizeof(buffer));
char name[] = "Joe"; // "Джо"
int age = 45;
mystring.print("Hi, my name is "); // "Привет, мое имя "
mystring.print(name);
mystring.print(" and I am "); // ", и мне "
mystring.print(age);
mystring.println(" years old."); // " лет."
При помощи этого кода вы помещаете в буфер предложение и делаете это, по сути, тем же способом, как если бы передавали его по последовательному порту.
Другие функции
PString – это очень минималистичный строковый класс. Он может сообщать о своих длине и объеме, а также обеспечивает постоянный доступ к своему внутреннему строковому буферу:
Serial.print(str.length());
Serial.print(str.capacity());
Serial.print(str);
Чтобы повторно воспользоваться одним и тем же объектом, существует функция begin(). Она сбрасывает позицию в буфере, с которой начнется следующий печатаемый текст.
str.print("Hello");
str.begin();
str.print("World");
// теперь объект str содержит слово "World"
Операторы
PString предусматривает работу с тремя операторами – для присваивания, конкатенации и равенства:
char buffer[20];
PString str(buffer, sizeof(buffer));
str = "Yin"; // присваивание
str += " Yang"; // конкатенация
if (str == "Yin Yang") // равенство
{
Serial.println("They are equal!"); // "Они одинаковы!"
}
Свойства объектов PString
Объекты PString не «владеют» собственными буферами, а полагаются на статические буферы, которые заданы заранее. Эти статические буферы передаются объектам PString в момент создания экземпляра класса. Объекты PString никогда не выделяют память динамично – даже если результат функции print(), присвоение или конкатенация приводят к переполнению размера буфера. В этом случае излишние данные просто игнорируются, а в конце самой строки, как и положено, ставится «0».
Благодаря этим ограничениям объекты PString обладают тремя ключевыми свойствами:
- Они никогда не приведут к переполнению буфера
- Строковый буфер всегда будет валидной памятью
- Буферы всегда будут содержать валидную строку (т.е. строку, завершающуюся нулем) в формате языка C
Загрузка
Чтобы загрузить класс, кликните по этой ссылке. Когда ZIP-файл скачается, распакуйте его. Проверьте эту папку на наличие файлов «PString.cpp» и «PString.h».
Установка
Чтобы использовать класс, поместите распакованный ZIP-файл в папку для библиотек IDE Arduino. Чтобы узнать, где находится эта папка на PC, откройте IDE Arduino, кликните на Файл > Настройки (File > Preferences) – адрес папки будет указан в самом верху, в поле «Размещение папки скетчей» (Sketchbook location). Затем перезапустите IDE Arduino. Если папки «libraries» нет, ее нужно создать.
История изменений
- Версия 1 – первоначальный релиз
- Версия 2 – добавлена поддержка строковых конверторов с модификаторами HEX, OCT и т.д. (позднее – и поддержка чисел с плавающей точкой).
- Версия 3 – добавлена совместимость с Arduino 1.0
Потребление ресурсов
Во время существования объект PString потребляет 8 байт памяти. В зависимости от используемых функций, подключение класса PString, как правило, добавляет к размеру скетча лишь 100-600 байт.
Примеры
- test pstring - Тестовый скетч для класса PString