Вы должны использовать F()
для хранения текста во флэш-памяти, вы не можете избежать этого.
Вы можете определить макрос:
#define FPRINT(x) print(F(x))
Serial.FPRINT("text");
Или даже так:
#define SFPRINT(x) Serial.print(F(x))
SFPRINT("test");
Конечно, вы можете заменить FPRINT
на то, что вы хотите, это не предопределено (в этом случае вы получите предупреждение компилятора).
Вы также можете использовать функцию printf_P
из <stdio.h>
и PSTR
макрос из <avr/pgmspace.h>
(по умолчанию они должны быть включены в вашу программу в Arduino IDE) .
Типичное использование с текстом, хранящимся в ОЗУ:
int a = 5;
printf("This is my variable: %d", a);
Результат:
Sketch uses 1946 bytes (6%) of program storage space.
Global variables use 39 bytes (1%) of dynamic memory
Использовать с текстом, хранящимся во FLASH:
int a = 5;
printf_P(PSTR ("This is my variable: %d"), a);
Результат:
Sketch uses 1958 bytes (6%) of program storage space.
Global variables use 15 bytes (0%) of dynamic memory