roboforum.ru

Технический форум по робототехнике.
Текущее время: 02 май 2025, 20:28

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: SD карта
СообщениеДобавлено: 18 июн 2011, 09:43 
Не в сети

Зарегистрирован: 18 июн 2011, 09:41
Сообщения: 3
Появилась задача писать на SD файлы с определенной периодичностью
Имена совпадать не должны
Решил реализовать так

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SD карта
СообщениеДобавлено: 18 июн 2011, 11:34 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2010, 13:56
Сообщения: 996
Откуда: Нижний Новгород
прог. языки: С, С++, РНР
Вы бы хоть упомянули в каком компиляторе работаете.
Как правило, если стринг и чар не синонимы, то должна быть функция, которая представляет строку стринг в виде чара. Обычно это что то типа c_str()

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SD карта
СообщениеДобавлено: 18 июн 2011, 11:55 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Строка - это нультерминированный массив байт. Т.е. имя переменной типа "строка" - это указатель на массив.

Если же это у тебя какое-нить 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 карта
СообщениеДобавлено: 18 июн 2011, 14:39 
Не в сети

Зарегистрирован: 18 июн 2011, 09:41
Сообщения: 3
Пишу в 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 карта
СообщениеДобавлено: 18 июн 2011, 21:55 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2010, 13:56
Сообщения: 996
Откуда: Нижний Новгород
прог. языки: С, С++, РНР
Ваш хх - это тоже лонг и в чар их надо превращать так же.
Отличие в том, что мой вариант дает гарантированно не повторяющиеся имена, а ваш - нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SD карта
СообщениеДобавлено: 20 июн 2011, 10:59 
Не в сети
Аватара пользователя

Зарегистрирован: 28 авг 2006, 17:09
Сообщения: 664
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов
Насколько я понял это на с++. На С было бы так:

char name[32];
int num = 0;

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SD карта
СообщениеДобавлено: 20 июн 2011, 13:00 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2010, 13:56
Сообщения: 996
Откуда: Нижний Новгород
прог. языки: С, С++, РНР
в этом плане С++ ничем не отличается. Там все также. Хотя я предложил ТС просто заменить 2-ю строку
с
Код:
xx=random(99999999);

на
Код:
xx++;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SD карта
СообщениеДобавлено: 20 июн 2011, 13:54 
Не в сети
Аватара пользователя

Зарегистрирован: 28 авг 2006, 17:09
Сообщения: 664
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов
HarryStar писал(а):
в этом плане С++ ничем не отличается


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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO