Перейти к содержанию
    

mrKirill

Свой
  • Постов

    316
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные mrKirill


  1. Да нет же! Всё замечательно увеличивается.

    Судя по тому, что static изменил поведение FatFs, могу предположить, что у вас проблемы с памятью либо стеком.

    Можно уточнить?

    А то что-то не совсем понял Вас.

  2. Замените атрибут FA_OPEN_ALWAYS на FA_OPEN_EXISTING.

    Сделайте объект dataFile статическим - static FIL dataFile;

     

    Проверьте результат, fsize всё так же после открытия файла будет равен нулю?

    Результат fsize стал правильный.

    Но оказалось что "затык" то не совсем в том, в чем я предполагал.

    По логике, если правильно понял описание f_lseek, указатель ставим в конец файла, потом проводим процедуру f_write, то в случае удачного ее исполнения файл должен увеличиться на длину строки. Что же выходит у меня:

    1. Ставлю указатель в конец файла (функция возвращает 0, т.е. good)

    2. Проверяю на всякий случай fsize и fptr, они равны и имеют корректное значение.

    3. Провожу запись строки.

    4. Проверяю количество записанных байт, они равны длине строки.

    5. Проверяю fsize и fptr, они равны и корректны.

    6. Вставляю карточку в ПК и вижу - файл не увеличился и не дописался.

     

    Если же создать файл изначально большого размера, а потом внутри него писать, указывая вручную точку начала записи - все пишется как положено.

     

    Файл любого размера FatFS создает только в момент создания файла с нуля, но никак не модифицирует размер...

     

    Если заработает, значит вы нашли баг в FatFS.

    Не нашел :)

  3. Я же вам в посте №4 привёл рабочую последовательность. Нужно проверять в первую очередь не dataFile.fsize, а результаты вызова функций. Если же и там всё в порядке, то проблема скорее всего не в FatFS, а в её кривом портировании.

    Результаты вызовов функций - 0, т.е. все в порядке...

    Ваша последовательность ничем в общем-то особо и не отличается от примеров от Chan'а...

    Что касательно dataFile.fsize, когда я в строке

    f_lseek(&dataFile,dataFile.fsize);
    вручную задаю точку указателя, то у меня все записывается как надо, с указанного места, но мне надо чтобы функция сама устанавливалась в конец файла и дописывала его.

    После открытия файла вывожу в терминал значение dataFile.fsize и оно нулевое...в итоге указатель постоянно устанавливается в нулевую позицию и строки вместо того чтобы дописываться в файл - затирают друг друга.

    Изобретать костыль не есть гуд, надо понять почему происходит затык.

     

    Думается, что проблема именно в функции записи. Потому как, если бы чтение не работало, сразу же повалились бы ошибки при diskinitialize(n) и диск не монтировался бы в принципе.

    Функция записи работает. Инициализация работает.

  4. Идет следующая последовательность строк:

     

    1. f_open(&dataFile,"log.txt",FA_OPEN_ALWAYS|FA_WRITE);
    - Открыл файл, если его нет, то создаю.

    2. f_lseek(&dataFile,dataFile.fsize);
    - Задал указателю точку конца файла.

     

    Но вот в чем проблема к строчке №2 значение dataFile.fsize держится в 0 и потому каждая последующая строка всегда начинает записываться с позиции 0, вместо дописывания к концовке файла.

     

    Между строками 1 и 2 нужно что-то дополнительно делать или может пауза нужна какая-то?

  5. Честно говоря даже и не подумал насчет этой функции, записи строки, попробую.

    А насчет конверсии - я пишу латинскими буквами.

     

    Что-то странное в этом есть...

    Пишу следующую строку:

     

    f_puts("proverka na zapis'\r\n",&dataFile);

     

    Повторяю строку N количество раз и в файле же вижу:

    test

     

    sU„

    e3T

    У–°ЧџhЯfDы‰ґuLU‰С‹qҐњшЬ–ѕ&кz°ihв7ґ<MЁк¤»к«чуыхё/|ЊY<МЈќlЋГ­і7з›mч”zbм-ъiІiАзХЃ-mП“ЎпПюяњэи2Кщ§‚йМ9ЗcіьиT›цй«'ылTЬSБньф»п!G/wo‹“ Юoo+хьuЖР

    Чем большее количество раз повторяю N, тем больше белиберды в файле...

     

    Отдельно скажу насчет первого слова "test" это слово я записывал еще в начале опытов с файловой системой, после этого несколько раз форматировал карточку.

    И теперь при каждом создании файла и записи оно сам по себе проявляется, а нужные слова не пишутся, цифры к слову тоже не пишутся...

    Все функции работают нормально, возвращают стабильно 0.

     

    Толи я в лыжи обут...

  6. Была некоторая пауза...Снова взялся за копание кода.

     

    Последовательность

    f_open(...);

    f_lseek(...);

    f_write(...);

    f_close(...);

     

    Заменил на

    f_open(...);

    f_lseek(...);

    f_write(...);

    f_sync(...);

     

    Результат стал получаться, т.е. информация в файл дописывается, но возникла другая проблема:

    записываемый текст совершенно не то что должно быть. Сконфигурирована кодировка Win1251, а в файле полная абракадабра, которая не подходит ни под одну кодировку. Записываю одно и тоже слово, а абракадабра постоянно разная...

  7. Имеется ситуация, что нужно в файле писать каждый параметр с новой строки...

     

    Проделываю следующую последовательность операций:

     

    1. f_open(...) - открыл файл

    2. f_lseek(...) - перешел в конец файла

    3. f_write(...) - записал новую строку

     

    На деле f_lseek получает правильное значение указателя конца файла, но запись строки происходит с нулевого байта файла и тем самым просто затираются старые данные и записываются новые...Что я не учел?

  8. В общем нашел какой то кусок кода который заработал в протеусе при частоте тинки только 8мгц, при этом программных задержек нет, крутить нечего

    теперь беда в том, что в железе тинка не заводится от внутреннего генератора на 8мгц, даже на 2 дурит, работает только на 1

    это с камнем у меня косяк или можно как то побороть?

    Чисто случайно про FUSE-биты не забыли при программировании чипа?

    Проблем с внутренним генератором быть не должно.

     

    PS. Вечером гляну Ваш архив, пока времени нет.

  9. Нарисовал в протеусе, протестил...

    В том же в Proteus'е есть i2c-тестер, разберитесь с его работой, подключите к линиям и посмотрите какие данные идут и в каком месте "затык" происходит.

     

    Ну и если не сложно, приложите архив с исходником и проектом Proteus'а, чтобы разговор более детальный был.

  10. ...Готовы заплатить деньги.

    Ну так я и говорю:

     

    Почему бы тогда не создать в специальном разделе объявление о необходимости разработки? ...

    Вот Вам направление - http://electronix.ru/forum/index.php?showforum=24

  11. За 2,5 часа bootloader не напишешь.

    Смешно смотреть, когда человек жалуется на недостаток времени, но при этом сам ничего не делает.

     

    Вот Вы все советы даете, а он продолжает

     

    Хорошо, а с исходниками кто-то может помочь?

    Почему бы тогда не создать в специальном разделе объявление о необходимости разработки? Или тлеет надежда на халяву?

     

    PS. В пустую прошли 1 сутки...Bootloader'а так и нет...

  12. Ну раз "флешер" контроллер определяет и прошивает - вроде как он исправен, а будет там Ваша прошивка или чья-то еще - не важно.

    Между ПК и МК явно стоит что-то уровне-согласующее, типа ххх232, думаю стоит проверить обвязку...

  13. ...очевидно от просадки напряжения (в моменты пиковой нагрузки)...
    Это догадки? Приборами проверяли? Осциллографом смотрели линию питания?

    Исходя из манеры написания предложения - даже не пытались экспериментировать, и тем более приборами смотреть, пытаетесь решить проблемы "методом тыка".

  14. А, "Temperature Rise" - это допустимый перегрев.

    На сколько его лучше всего выставлять?

    Обычно беру 10...15 градусов перегрев...Не имею привычки проектировать на грани, лучше иметь запас.

    Каждый на свое усмотрение выбирает значение.

  15. Что-то я не въехал. Чем больше температура проводника, тем больше тока он может пропустить?

    А что это за термин Temperature Rise. Откуда ж мне знать до какой температуры будет нагреваться проводник. По идее вообще не должен греться.

    Вы путаете "причины" и "следствия"...

    Проводник нагревается от проходящего по нему тока, чем выше ток, тем больше нагревание.

    По закону Джоуля-Ленца греется любой проводник, по которому протекает ток...физика школьного курса :)

    Есть много факторов, которые могут повлиять на допустимую для Вас температуру перегрева проводника - от простого потемнения защитного покрытия (оплавление изоляции), до "перегорания" проводника...

    "Temperature Rise" - тот же самый "перегрев".

    Между прочим калькулятор по ссылке дает совершенно тот же результат, что и в Sprint-Layout...только в последнем все немного утрировано, в частности жестко задано "Ambient Temperature = 20°С".

  16. Нет это не перегрев.

    Было бы написано. Да и в описании ничего про перегрев не сказано.

    То что это не написано, вовсе ничего не значит...Хотя значит, что пользователь должен это знать, что допустимый ток через проводник определятся не только его сечением, но и допустимым перегревом.

    Те градусы в программе это перегрев относительно 20°С.

  17. проверил - опечатки нет...

    Почему возник вопрос?

    Почему? Наверное потому что речь идет про ELECTRONIX.ru, а у Вас написано ELEXRONIX.ru

    Не замечаете разницы?

     

    PS. Прикрепленную картинку не смотрели чтоли?

  18. Синие - это похоже предохранители. http://www.chipdip.ru/product0/510622184.aspx

    Варистор и предохранитель - разные элементы. Называйте вещи своими именами, а то вдруг найдется умник поставить предохранитель вместо варистора...и появится новая тема на форуме "Горят предохранители! Что делать?"

×
×
  • Создать...