реклама на сайте
подробности

 
 
5 страниц V  < 1 2 3 4 5 >  
Reply to this topicStart new topic
> Вопрос по FatFs от мистера ChaN'а
Andy Mozzhevilov
сообщение Mar 20 2009, 16:20
Сообщение #31


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



смотрели здесь?
http://elm-chan.org/fsw/ff/patches.txt

есть исправление в том числе к fprintf()


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
alux
сообщение Mar 21 2009, 06:41
Сообщение #32


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Вопрос снимается. Проблема была связана с нехваткой стека возвратов. smile.gif
Вообще, нужно написать плакат большими буквами:
"Если программа ведет не так как задумано, первым делом проверь стеки..."
Go to the top of the page
 
+Quote Post
alux
сообщение Mar 23 2009, 08:29
Сообщение #33


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



В симуляторе проверил fprintf , только убрал обращения к объекту file. Получилось следующее:
в пустой функции main() вызываю
Код
  const char format[] = "%u/%u/%u %u:%u:%u";
  testfprintf(format, 1, 2, 3, 4, 5, 6);
так выводит все числа.
А вот если
Код
  const char format[] = "%u/%u/%u %u:%u:%u";
  testfprintf(format, 1, 22, 333, 4444, 55555, 6666);

то на последнем аргументе (6666) va_arg() возвращает 0, и соответственно, выводит только 5 аргументов.
Видимо, это та проблема, которая описана в patches.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 23 2009, 08:42
Сообщение #34


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(alux @ Mar 23 2009, 10:29) *
Видимо, это та проблема, которая описана в patches.
Откуда "видимо"? Аргументируйте. В описании патчей написано:
Цитата
will cause an incorrect behavior on the big-endian processor
С каких пор AVR под IARом стал big-endian?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Mar 23 2009, 09:21
Сообщение #35


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(Сергей Борщ @ Mar 23 2009, 14:42) *
Откуда "видимо"? Аргументируйте. В описании патчей написано:С каких пор AVR под IARом стал big-endian?

Да, там действительно упоминается по то, что эта ошибка возникает для big-endian.
Но, я привык отвечать на вопросы в том объеме, в котором они заданы smile.gif
В исходном вопросе я нигде не увидел упоминание о типе процессора. И хотя я понимаю, что "вероятностно" это проц. с маленькими индейцами, тем не менее формально рекомендация верна smile.gif. А дальше уже дело автора разбираться со своими индейцами (в данном конкртеном случае) или искать причину в другом.


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
alux
сообщение Mar 23 2009, 09:27
Сообщение #36


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



согласен. Тогда почему 6-ой аргумент не выводит? Почему "маленькие" числа выводит, а чуть побольше - не все. Числа ведь в пределах unsigned int
И это уже не связано с нехваткой стека.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 23 2009, 11:23
Сообщение #37


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(alux @ Mar 23 2009, 11:27) *
согласен. Тогда почему 6-ой аргумент не выводит?
У вас в руках есть симулятор. Даже два - родной ИАРовский и Студийный. Прогнать в нем программу, следя куда при вызове testfprintf были положены аргументы, откуда они достаются в va_arg() и кто их портит, если портит - дело минут, ну максимум часа-двух.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Mar 25 2009, 08:52
Сообщение #38


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата(alux @ Mar 23 2009, 11:29) *
В симуляторе проверил fprintf , только убрал обращения к объекту file. Получилось следующее:
в пустой функции main() вызываю
Код
  const char format[] = "%u/%u/%u %u:%u:%u";
  testfprintf(format, 1, 2, 3, 4, 5, 6);
так выводит все числа.
А вот если
Код
  const char format[] = "%u/%u/%u %u:%u:%u";
  testfprintf(format, 1, 22, 333, 4444, 55555, 6666);

то на последнем аргументе (6666) va_arg() возвращает 0, и соответственно, выводит только 5 аргументов.
Видимо, это та проблема, которая описана в patches.


6666 это уже 32-битное число. Соответственно, надо

const char format[] = "%u/%u/%u %u:%u:%lu";

Сообщение отредактировал Genadi Zawidowski - Mar 25 2009, 09:02
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Mar 25 2009, 11:10
Сообщение #39


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(Genadi Zawidowski @ Mar 25 2009, 10:52) *
6666 это уже 32-битное число. Соответственно, надо

const char format[] = "%u/%u/%u %u:%u:%lu";

Ничего подобного. До 32-битного еще добавлять и добавлять.

Проверьте саму fprintf. Если используется промежуточный буфер и vsnprintf, проверьте его размер, может банально не влезть.
Go to the top of the page
 
+Quote Post
artemm
сообщение Mar 31 2009, 12:11
Сообщение #40


Частый гость
**

Группа: Свой
Сообщений: 80
Регистрация: 23-07-07
Из: Украина, г. Сумы
Пользователь №: 29 306



Скажите, если я пишу отак:
Цитата
FATFS fs;
FIL fdst;
FRESULT res;
f_mount(0, &fs);
res = f_open(&fdst, "test.dat", FA_CREATE_ALWAYS | FA_WRITE);
fprintf(&fdst, "%s", "This is a test");
f_close(&fdst);
f_mount(0, NULL);


файловая система сама ищет свободные кластера и туда это всё дело записывает?? Нужно лишь беспокоиться о свободном месте на флешке??? или нет?
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Mar 31 2009, 14:25
Сообщение #41


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(artemm @ Mar 31 2009, 17:11) *
файловая система сама ищет свободные кластера и туда это всё дело записывает?? Нужно лишь беспокоиться о свободном месте на флешке??? или нет?

Ну да. А для чего тогда иначе была бы нужна файловая система?


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
kostik2
сообщение Apr 1 2009, 17:02
Сообщение #42


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 16-02-06
Пользователь №: 14 375



Цитата(Сергей Борщ @ Nov 23 2007, 12:59) *
Как что? Не прочитали документацию. Хотя бы на f_mount:Можно было еще заглянуть в исходники, и увидеть, что f_mount только сохраняет адрес этой структуры во внутренней переменной. А заполнение произойдет потом, когда попытаетесь призвести какое-нибудь действие с файлом/директорией.

Заинтересовался этим вопросом тоже. avr и flash. Можете, если у вас есть наработки поделиться ими. Буду очень благодарен.

здравствуйте. заинтересовался этим вопросом тоже. о пока я не очень представляю механизм написания программы чтения и записи данных в flash. если не трудно, могете поделиться исходниками по работе с fat32 для avr. буду очень благодарен. kostiapan@mail.ru
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Apr 1 2009, 17:49
Сообщение #43


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата(HARMHARM @ Mar 25 2009, 15:10) *
Ничего подобного. До 32-битного еще добавлять и добавлять.

Проверьте саму fprintf. Если используется промежуточный буфер и vsnprintf, проверьте его размер, может банально не влезть.

Проглядел деталь... предпоследнее число было 55555 - мне показалось. что в неработающем примере было 66666. Может, человек по памяти писал?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 1 2009, 19:45
Сообщение #44


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(kostik2 @ Apr 1 2009, 20:02) *
Можете, если у вас есть наработки поделиться ими. Буду очень благодарен.
Наработки есть на сайте автора. Их там аж несколько штук. Что вас в них не устраивает и почему вы считаете, что чьи-то еще будут лучше?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Apr 2 2009, 08:02
Сообщение #45


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(kostik2 @ Apr 1 2009, 20:02) *
пока я не очень представляю механизм написания программы чтения и записи данных в flash.

Копайте уровень железа - diskio.*
Вам надо надуться на написание нескольких процедур (чтение/запись/статус/инициализация/контрол) и решить, что будете делать с таймстампом.
Go to the top of the page
 
+Quote Post

5 страниц V  < 1 2 3 4 5 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 03:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.02007 секунд с 7
ELECTRONIX ©2004-2016