roboforum.ru

Технический форум по робототехнике.

SD карта

SD карта

Goldz » 18 июн 2011, 09:43

Появилась задача писать на SD файлы с определенной периодичностью
Имена совпадать не должны
Решил реализовать так

String dataString = "";
long xx=random(99999999);
dataString=String(xx);
dataString += ".txt";

Но проблема
Стандартная функция записи библиотеки SD
просит имя файла в структуре CHAR*

Дайте совет как преобразовать String в Char*

Re: SD карта

HarryStar » 18 июн 2011, 11:34

Вы бы хоть упомянули в каком компиляторе работаете.
Как правило, если стринг и чар не синонимы, то должна быть функция, которая представляет строку стринг в виде чара. Обычно это что то типа c_str()

И кстати метод формирования неповторяющегося имени у вас не очень. Как минимум надо ставить проверку, нет ли такого же и перегенерить, если есть. Лучше просто 1, 2, 3 и т.д. - повторяться точно не будут. Последний счетчик хранить в памяти например или там же на карте в отдельном файле типа index.txt

Re: SD карта

dccharacter » 18 июн 2011, 11:55

Строка - это нультерминированный массив байт. Т.е. имя переменной типа "строка" - это указатель на массив.

Если же это у тебя какое-нить QT, то надо позвать метод toByteArray()

Добавлено спустя 1 минуту 6 секунд:
const QChar * QString::constData () const
Returns a pointer to the data stored in the QString. The pointer can be used to access the characters that compose the string. For convenience, the data is '\0'-terminated.
Note that the pointer remains valid only as long as the string is not modified.
See also data() and operator[]().

Re: SD карта

Goldz » 18 июн 2011, 14:39

Пишу в Arduino-022

Добавлено спустя 35 минут 9 секунд:
Лучше просто 1, 2, 3 и т.д. - повторяться точно не будут

1,2,3 и тд это int или long. Как их превратить в char*

Добавлено спустя 1 час 1 минуту 9 секунд:
Получилось вот так

//Создание имя файла
String dataString = "";
long xx=random(99999999);
dataString=String(xx);
dataString += ".txt";
char buf[13];
dataString.toCharArray(buf,13);
CardWrite(buf);//вызов функции записи
Serial.println(buf);

void CardWrite(char* filename)//Создание и запись в файл
и т.д.

Re: SD карта

HarryStar » 18 июн 2011, 21:55

Ваш хх - это тоже лонг и в чар их надо превращать так же.
Отличие в том, что мой вариант дает гарантированно не повторяющиеся имена, а ваш - нет.

Re: SD карта

Strijar » 20 июн 2011, 10:59

Насколько я понял это на с++. На С было бы так:

char name[32];
int num = 0;

sprintf(name, "%i.txt", num++);

Re: SD карта

HarryStar » 20 июн 2011, 13:00

в этом плане С++ ничем не отличается. Там все также. Хотя я предложил ТС просто заменить 2-ю строку
с
Код: Выделить всёРазвернуть
xx=random(99999999);

на
Код: Выделить всёРазвернуть
xx++;

Re: SD карта

Strijar » 20 июн 2011, 13:54

HarryStar писал(а):в этом плане С++ ничем не отличается


Да я знаю, что не отличается - за скобками осталось "Нафига?" ;) Писать для AVR на ООП?


Rambler\'s Top100 Mail.ru counter