Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 11.10.2013, 21:44  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Вариантов не так уж много. Невнимательное чтение:
http://elm-chan.org/fsw/ff/en/open.html
Слепое копирование чужих примеров без понимания происходящего - не лучший путь к изучению.
Реклама:
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Непрочитано 11.10.2013, 22:47  
swat24
Гражданин KAZUS.RU
 
Регистрация: 16.03.2009
Адрес: Украина, Харьков
Сообщений: 762
Сказал спасибо: 108
Сказали Спасибо 67 раз(а) в 67 сообщении(ях)
swat24 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Почему же сразу слепое копирование. Взял пример только со считыванием, разбираюсь в нем плюс добавляю еще и запись.
Просто я не пойму, почему при закрытии возвращается ошибка. Получается нет возможности записать файл.
Сделал для чтения один указатель, для записи второй. И все равно при закрытии файла после записи выдает ошибка 1. A hard error occurred in the low level disk I/O layer */
swat24 вне форума  
Непрочитано 11.10.2013, 23:58  
ut1wpr
Почётный гражданин KAZUS.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Код:
res = f_open(&fdst, "test.txt", FA_OPEN_EXISTING | FA_WRITE);
Это у вас. При этом совершенно неясно, есть у вас этот файл в системе или его еще нет. По крайней мере в приведенном примере похоже на попытку открыть несуществующий файл. Не видно его создания.
А у Чана по моей ссылке однозначно сказано про примененный вами метод открытия:
FA_OPEN_EXISTING Opens the file. The function fails if the file is not existing. (Default)
Если вы создали файл в другом устройстве и он уже есть на носителе, то и методы открытия должны быть иные, и типы доступа...
FA_OPEN_ALWAYS Opens the file if it is existing. If not, a new file is created. To append data to the file, use f_lseek() function after file open in this method.
Это вы читали? Зачем я ссылку давал?
Непонятно одно. Как это вам удалось меня втянуть в обсуждение темы FS в теме STM32? Эти вопросы вообще-то никакого отношения к STM32 не имеют. FAT FS может жить на любой платформе.
Так что в дальнейшем я не принимаю участия. Больше читайте, старайтесь понять. Уж куда понятнее, чем у Чана. Классика.
__________________
С уважением,
Vic / ut1wpr

Последний раз редактировалось ut1wpr; 12.10.2013 в 00:13.
ut1wpr вне форума  
Непрочитано 12.10.2013, 11:43  
banzayy
Временная регистрация
 
Регистрация: 12.09.2006
Сообщений: 69
Сказал спасибо: 2
Сказали Спасибо 1 раз в 1 сообщении
banzayy на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

я тоже в этом новичёк, но попробовал вставить кусочек в свою тест прогу - работает. В дебаггере видно, что считалось в буфер.
Миниатюры:
Нажмите на изображение для увеличения
Название: 1.gif
Просмотров: 82
Размер:	20.7 Кб
ID:	53088  
banzayy вне форума  
Непрочитано 12.10.2013, 17:46  
swat24
Гражданин KAZUS.RU
 
Регистрация: 16.03.2009
Адрес: Украина, Харьков
Сообщений: 762
Сказал спасибо: 108
Сказали Спасибо 67 раз(а) в 67 сообщении(ях)
swat24 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Файл созданный. Если в начале его прочитать, а потом записать - то все хорошо, после ресета читает новую строку из файла. Но если вначале записать, а потом попробовать считать - ничего. Буфер пустой.
А пишу тут, т.к. пробую на СТМ.


banzayy, переписал ваш пример - буфер пустой. ничего не читает....

Ладно, буду разбираться дальше. Думал может есть какая - нибудь определенная последовательность операций для чтения после записи...
swat24 вне форума  
Непрочитано 12.10.2013, 19:18  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от swat24 Посмотреть сообщение
после ресета читает новую строку из файла. Но если вначале записать, а потом попробовать считать - ничего
Если действия выполняются именно в таком порядке, то всё правильно - читаться и не должно, т.к. файловый указатель находится в самом конце файла.

Сообщение от swat24 Посмотреть сообщение
может есть какая - нибудь определенная последовательность операций для чтения после записи...
lseek в начало.
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 12.10.2013, 20:14  
swat24
Гражданин KAZUS.RU
 
Регистрация: 16.03.2009
Адрес: Украина, Харьков
Сообщений: 762
Сказал спасибо: 108
Сказали Спасибо 67 раз(а) в 67 сообщении(ях)
swat24 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Про возврат указателя я знаю. По этому и спрашиваю, т.к. варианты закончились
Вот полный код, который пробую:

Код:
	printf("Инициализация диска %i\r\n",disk_initialize(0));
	printf("Монтирование диска %i\r\n",f_mount(&fs,"0",1));


	if (f_opendir(&dirs, path) == FR_OK) 
	{
		res = f_open(&fdst, "0:test.txt",FA_OPEN_ALWAYS | FA_WRITE);
		printf("Открытие файла %i\r\n",res);
		br=0;
		res = f_lseek(&fdst,0);
		printf("Перевод курсора %i\r\n",res);
		res = f_write(&fdst, "45612\r\n",7, &br);
		if (res || br == 0) return 1;
		//res = f_printf(&fdst,"Hello %d", 7362);
		printf("Запись в файл %i, %i\r\n",res,br);
		res = f_close(&fdst);
		printf("Закрытие файла %i\r\n",res);
		
		res = f_open(&fsrc, "0:test.txt", FA_OPEN_EXISTING | FA_READ);
		br=0;
		//f_sync(&fdst);        
		for(a=0; a‹512; a++) buffer[a]=0;
		res = f_lseek(&fsrc,0);
		printf("Перевод курсора %i\r\n",res);
		res = f_read(&fsrc, buffer, sizeof(buffer), &br);
		printf("Чтение файла %i\r\n",res);
		printf("Содержимое файла: %s\r\n",buffer);
		res = f_close(&fsrc);
		printf("Закрытие файла %i\r\n",res);
		
		f_mount(NULL, "0:", 0);
}
Результат работы:
Код:
Открытие файла 0
Перевод курсора 0
Запись в файл 0, 7
Закрытие файла 1
Перевод курсора 0
Чтение файла 1
Содержимое файла: 
Закрытие файла 0
А вот так работает (разбил запись/чтение на разные подпрограммы. И в каждом своя инициализация с последующим удалением диска) :
Код:
int write(void)
{
	unsigned int a;
	FRESULT res;
	FILINFO finfo;
	DIR dirs;
	char path[16]={""};  
#if _USE_LFN
    finfo.lfname = Fs_LongFileName;
    finfo.lfsize = sizeof(Fs_LongFileName);
#endif

	printf("Инициализация диска %i\r\n",disk_initialize(0));
	printf("Монтирование диска %i\r\n",f_mount(&fs,"0",1));


	if (f_opendir(&dirs, path) == FR_OK) 
	{
  	res = f_open(&fdst, "0:test.txt",FA_OPEN_ALWAYS | FA_WRITE);
		printf("Открытие файла %i\r\n",res);
		br=0;
		res = f_lseek(&fdst,0);
		printf("Перевод курсора %i\r\n",res);
		res = f_write(&fdst, "test1\r\n",7, &br);
		if (res || br == 0) return 1;
		//res = f_printf(&fdst,"Hello %d", 7362);
		printf("Запись в файл %i, %i\r\n",res,br);
		res = f_close(&fdst);
		printf("Закрытие файла %i\r\n",res);
		
		f_mount(NULL, "0:", 0);
	}
}

int read(void)
{
	unsigned int a;
	FRESULT res;
	FILINFO finfo;
	DIR dirs;
	char path[16]={""};  
#if _USE_LFN
    finfo.lfname = Fs_LongFileName;
    finfo.lfsize = sizeof(Fs_LongFileName);
#endif

	printf("Инициализация диска %i\r\n",disk_initialize(0));
	printf("Монтирование диска %i\r\n",f_mount(&fs,"0",1));
	
	if (f_opendir(&dirs, path) == FR_OK) 
	{
		res = f_open(&fsrc, "0:test.txt", FA_OPEN_EXISTING | FA_READ);
		br=0;
		//f_sync(&fdst);        
		for(a=0; a‹512; a++) buffer[a]=0;
		res = f_lseek(&fsrc,0);
		printf("Перевод курсора %i\r\n",res);
		res = f_read(&fsrc, buffer, sizeof(buffer), &br);
		printf("Чтение файла %i\r\n",res);
		printf("Содержимое файла: %s\r\n",buffer);
		res = f_close(&fsrc);
		printf("Закрытие файла %i\r\n",res);
		
		f_mount(NULL, "0:", 0);
	}
}
Работает если второй раз смонтировать диск. Если не монтировать, то уже не читает...

Последний раз редактировалось swat24; 12.10.2013 в 21:15.
swat24 вне форума  
Непрочитано 13.10.2013, 21:43  
kvark85
Прописка
 
Регистрация: 31.08.2008
Сообщений: 183
Сказал спасибо: 25
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
kvark85 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

как прозводить измерение двух каналов одиночными ADC преобразованиями. делаю так: изменить канал (IN1) - произвести преобразование - математическое действие, затем изменить канал (IN2) - произвести преобразование - математическое действие.
при этом получается полная ерунда, как будто на входе не постоянное напряжение, в шум. так делать нельзя? почему? если закоментировать, например, "изменить канал (IN2)" - видно что канал 1 выставляется правильно и напряжение меряется правильно и математика с измерением выполняется правильно, а если разкоментировать - на индикаторе опять шум какой то
__________________
Kvsrk85(Андрей)
kvark85 вне форума  
Непрочитано 13.10.2013, 22:39  
andries5
Почётный гражданин KAZUS.RU
 
Регистрация: 19.02.2008
Сообщений: 1,809
Сказал спасибо: 124
Сказали Спасибо 604 раз(а) в 421 сообщении(ях)
andries5 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

kvark85, шум на обоих каналах? Я делал так, четыре канала. Включаю один светодиод, жду немного, потом преобразование с фотодиода. Выключаю первый СД, включаю второй СД. Жду немного, преобразование с о второго ФД. и так далее. Правда все пары немного отличаются, но в целом близко. И нормально реагируют на изменение прохождение света. Каждый канал отдельное преобразование. Из-за переключения СД. Математику после. И так каждую 1мс. А почему у Вас не идет?
andries5 вне форума  
Непрочитано 14.10.2013, 01:08  
kvark85
Прописка
 
Регистрация: 31.08.2008
Сообщений: 183
Сказал спасибо: 25
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
kvark85 на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

у меня время между преобразованиями 50 микросекунд. может из за этого? завтра покажу код
__________________
Kvsrk85(Андрей)
kvark85 вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Школа АRMрестлинга Uragan90 Микроконтроллеры, АЦП, память и т.д 54 22.08.2011 16:13
ARM Cortex M3 + Linux SiMiLya Микроконтроллеры, АЦП, память и т.д 10 17.06.2011 17:20
Помогите с STM32 - очень нужно... yakuzaa Микроконтроллеры, АЦП, память и т.д 60 04.08.2010 11:04
Как добавить поддержку для STM32 SFHK Микроконтроллеры, АЦП, память и т.д 11 18.12.2009 18:09


Часовой пояс GMT +4, время: 13:24.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot