Для записи логов на SD Card, написал свой класс Logger, который использует методы библиотеки SD.h. Код (C++): #ifndef SAVELOG_h #define SAVELOG_h #include <SD.h> #define bufflen 2048 //объем буфера записи (кэша) class LOGGER { private : int cashpoint = 0; char cashbuffer[bufflen]={0}; //буфер (кэш) char buff[256]={0}; String TwoDigit(int value); boolean CheckDelFile(const String &FileName); String GetFileName(); void SaveData(const String s,boolean prnln); public : LOGGER(); boolean Init(bool toSD); int GetCashPoint(); void SaveCash2SD(bool prevdate = false,bool fullcash = false); void println(const String &s); void println(int); void println(unsigned int); void println(unsigned long); void println(float); void println(double); void println(char); void println(unsigned char); void println(const char[]); void print(const char[]); void print(char); void print(unsigned char); void print(const String &s); void print(int); void print(unsigned int); void print(unsigned long); void print(long); void print(float); void print(double); void DeleteOldFile(); boolean fDebug; }; #endif В основном файле проекта (Station.ino) Код (C++): // подключаем Logger #include "savelog.h" //Инициализируем Logger LOGGER Log; Так же в проекте присутствуют объекты других классов, из них тоже пишется лог-файл. Как правильно передать в другой объект ссылку, на уже созданный объект Log, что бы Log, оставался единственным экземпляром? Я воспользовался объявлением в h-файлах extern LOGGER Log; Но скорее всего есть более корректный метод.
В классе обьявляется статический член типа Logger* с модификатором прайвет. Так же есть статический публичный метод getLogger() Код (C++): Logger* getLogger() { if (Logger::singleLogger == NULL) { Logger::singleLogger = new Logger(); } return Logger::singleLogger; }
Просто для красоты, чтоб логгер был атомарным. Зазотел в другой проект перенести, скопировал эти два файла и не надо париться с объявлением логгер, сам объявится
Мне почему то казалось, что это реализуется как то так Код (C++): SdBaseFile(const char* path, uint8_t oflag) : FatFile(path, oflag) {} Просто отвлеченный кусок кода. Видимо я ошибся