Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Перенос FatFs от Chan'a с GCC на IAR AVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
SZ0
Решил перенести с GCC на IAR, т.к. мне не удобно или проще говоря, не нравится писать под GCC. Пример от Chan'a я скомпилировал под gcc, проверил, всё нормально работает. Начал переносить на IAR, там по большей части преобразование типов. Может где и ошибся. В итоге вылез косяк, который обнаружился следующим образом:

Код
Line[0] = '1';
Line[1] = '2';
Line[2] = '3';
Line[3] = '4';
Line[4] = '5';
Line[5] = '6';
Line[6] = '7';
Line[7] = '0';
Line[8] = '.';
Line[9] = 't';
Line[10] = 'x';
Line[11] = 't';
Line[12] = 0;

ptr = Line;

disk_initialize(0);
f_mount(0, &Fatfs[0]);
f_open(&file1, ptr, FA_WRITE | FA_OPEN_ALWAYS);

Buff[0] = '1';
Buff[1] = '2';
Buff[2] = '3';
Buff[3] = '4';
Buff[4] = '5';
Buff[5] = '6';
Buff[6] = '7';
Buff[7] = 0;

f_write(&file1, Buff, 7, &s2);
f_close(&file1);
f_mount(0, 0);

Buff[0] = '1';
Buff[1] = '2';
Buff[2] = '3';
Buff[3] = '4';
Buff[4] = '5';
Buff[5] = '6';
Buff[6] = '7';
Buff[7] = '8';
Buff[8] = 0;
    
ptr = Line;
disk_initialize(0);
f_mount(0, &Fatfs[0]);
f_open(&file1, ptr, FA_WRITE | FA_OPEN_ALWAYS);
f_write(&file1, Buff, 8, &s2);
f_close(&file1);
f_mount(0, 0);


В итоге создаются два одинаковых файла с одинаковыми именами, с записью данных в файле 1234567, а должно быть в 1м файле 1234567, а во 2м 12345678. Но, длина, при просмотре корневого каталога показывается: у 1го файла 7 байт, а у 2го - 8 байт, но данные внутри каждого одинаковые - 1234567. Под gcc же после 2й операции создания файла, просто переписываетс изначальной 1й созданный файл. Частично выяснил, что в функции f_open
Код
res = follow_path(&dj, path);    /* Follow the file path */

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

Может уже кто переносил и я занимаюсь пустой работой? Или подскажите куда копать, т.к. я в этих глубинах кода уже cranky.gif

P.S. Всех с Днём Радио!!! beer.gif
zltigo
Там нечего портировать. Совсем нечего - чистый 'C', но если вдруг Вы чего-то зачем-то поменяли, причем на
таком:
Цитата(SZ0 @ May 7 2010, 12:37) *
[code] Line[0] = '1';
Line[1] = '2';
Line[2] = '3';
Line[3] = '4';
Line[4] = '5';
Line[5] = '6';
Line[6] = '7';
Line[7] = '0';
Line[8] = '.';
Line[9] = 't';
Line[10] = 'x';
Line[11] = 't';
Line[12] = 0;

уровне владения языком, то быть может внесено все, что угодно sad.gif. Сама файловая система где только не работает - без проблем.
SZ0
Цитата(zltigo @ May 7 2010, 15:54) *
Там нечего портировать.


Да же почему-то не удивился, что Вы ответили в таком тоне... smile.gif Да, вот такой извращенец, что пишут так простецки biggrin.gif. Раз у Вас всё работает без проблем, то почему бы не привести готовую портированную систему под другой компилятор? Например IAR wink.gif
zltigo
Цитата(SZ0 @ May 7 2010, 13:08) *
Раз у Вас всё работает без проблем, то почему бы не привести готовую портированную систему под другой компилятор? Например IAR wink.gif

Не хочу, там есть мои интимные дополнения и естественное портирование на платформы отличные от 8bit. Но явных претензий в FAT совсем нет. Повторяю еще раз собственно FAT компилися любым компилятором.
Арк К
Там действительно нечего портировать. В файле ff.c мой IAR выдал ошибки на присвоение разных типов в двух местах. Было

Код
void mem_cpy (void* dst, const void* src, int cnt) {
    char *d = dst;

я сделал char *d = (char*)dst;

и всё.
Остальные файлы - да, потребовали некоторой работы, но там работа с железом.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.