Andy_Mozzhevilov 0 20 марта, 2009 Опубликовано 20 марта, 2009 · Жалоба смотрели здесь? http://elm-chan.org/fsw/ff/patches.txt есть исправление в том числе к fprintf() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alux 0 21 марта, 2009 Опубликовано 21 марта, 2009 · Жалоба Вопрос снимается. Проблема была связана с нехваткой стека возвратов. :) Вообще, нужно написать плакат большими буквами: "Если программа ведет не так как задумано, первым делом проверь стеки..." Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alux 0 23 марта, 2009 Опубликовано 23 марта, 2009 · Жалоба В симуляторе проверил 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 141 23 марта, 2009 Опубликовано 23 марта, 2009 · Жалоба Видимо, это та проблема, которая описана в patches.Откуда "видимо"? Аргументируйте. В описании патчей написано:will cause an incorrect behavior on the big-endian processorС каких пор AVR под IARом стал big-endian? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andy_Mozzhevilov 0 23 марта, 2009 Опубликовано 23 марта, 2009 · Жалоба Откуда "видимо"? Аргументируйте. В описании патчей написано:С каких пор AVR под IARом стал big-endian? Да, там действительно упоминается по то, что эта ошибка возникает для big-endian. Но, я привык отвечать на вопросы в том объеме, в котором они заданы :) В исходном вопросе я нигде не увидел упоминание о типе процессора. И хотя я понимаю, что "вероятностно" это проц. с маленькими индейцами, тем не менее формально рекомендация верна :). А дальше уже дело автора разбираться со своими индейцами (в данном конкртеном случае) или искать причину в другом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alux 0 23 марта, 2009 Опубликовано 23 марта, 2009 · Жалоба согласен. Тогда почему 6-ой аргумент не выводит? Почему "маленькие" числа выводит, а чуть побольше - не все. Числа ведь в пределах unsigned int И это уже не связано с нехваткой стека. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 141 23 марта, 2009 Опубликовано 23 марта, 2009 · Жалоба согласен. Тогда почему 6-ой аргумент не выводит?У вас в руках есть симулятор. Даже два - родной ИАРовский и Студийный. Прогнать в нем программу, следя куда при вызове testfprintf были положены аргументы, откуда они достаются в va_arg() и кто их портит, если портит - дело минут, ну максимум часа-двух. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 25 марта, 2009 Опубликовано 25 марта, 2009 (изменено) · Жалоба В симуляторе проверил 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"; Изменено 25 марта, 2009 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HARMHARM 0 25 марта, 2009 Опубликовано 25 марта, 2009 · Жалоба 6666 это уже 32-битное число. Соответственно, надо const char format[] = "%u/%u/%u %u:%u:%lu"; Ничего подобного. До 32-битного еще добавлять и добавлять. Проверьте саму fprintf. Если используется промежуточный буфер и vsnprintf, проверьте его размер, может банально не влезть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artemm 0 31 марта, 2009 Опубликовано 31 марта, 2009 · Жалоба Скажите, если я пишу отак: 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); файловая система сама ищет свободные кластера и туда это всё дело записывает?? Нужно лишь беспокоиться о свободном месте на флешке??? или нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andy_Mozzhevilov 0 31 марта, 2009 Опубликовано 31 марта, 2009 · Жалоба файловая система сама ищет свободные кластера и туда это всё дело записывает?? Нужно лишь беспокоиться о свободном месте на флешке??? или нет? Ну да. А для чего тогда иначе была бы нужна файловая система? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kostik2 0 1 апреля, 2009 Опубликовано 1 апреля, 2009 · Жалоба Как что? Не прочитали документацию. Хотя бы на f_mount:Можно было еще заглянуть в исходники, и увидеть, что f_mount только сохраняет адрес этой структуры во внутренней переменной. А заполнение произойдет потом, когда попытаетесь призвести какое-нибудь действие с файлом/директорией. Заинтересовался этим вопросом тоже. avr и flash. Можете, если у вас есть наработки поделиться ими. Буду очень благодарен. здравствуйте. заинтересовался этим вопросом тоже. о пока я не очень представляю механизм написания программы чтения и записи данных в flash. если не трудно, могете поделиться исходниками по работе с fat32 для avr. буду очень благодарен. [email protected] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 1 апреля, 2009 Опубликовано 1 апреля, 2009 · Жалоба Ничего подобного. До 32-битного еще добавлять и добавлять. Проверьте саму fprintf. Если используется промежуточный буфер и vsnprintf, проверьте его размер, может банально не влезть. Проглядел деталь... предпоследнее число было 55555 - мне показалось. что в неработающем примере было 66666. Может, человек по памяти писал? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 141 1 апреля, 2009 Опубликовано 1 апреля, 2009 · Жалоба Можете, если у вас есть наработки поделиться ими. Буду очень благодарен.Наработки есть на сайте автора. Их там аж несколько штук. Что вас в них не устраивает и почему вы считаете, что чьи-то еще будут лучше? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 2 апреля, 2009 Опубликовано 2 апреля, 2009 · Жалоба пока я не очень представляю механизм написания программы чтения и записи данных в flash. Копайте уровень железа - diskio.* Вам надо надуться на написание нескольких процедур (чтение/запись/статус/инициализация/контрол) и решить, что будете делать с таймстампом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться