Решил перенести с 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. В результате чего должен переписываться или открываться файл с этим именем.
Может уже кто переносил и я занимаюсь пустой работой? Или подскажите куда копать, т.к. я в этих глубинах кода уже
P.S. Всех с Днём Радио!!!