Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Библиотеки/PString

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Ambox content.png Черновик


Класс 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

См.также

Внешние ссылки

  1. arduiniana.org - PString