и зачем эта if (!fs) return FR_NOT_ENABLED проверка вообще ?
если fs это указатель на структуру
typedef struct _FATFS {
BYTE fs_type; /* FAT type */
-------------------------------------------------------------
DWORD database; /* Data start sector */
DWORD winsect; /* Current sector appearing in the win[] */
BYTE win[512]; /* Disk access window for Directory/FAT area */
} FATFS;
FATFS *FatFs; // FATFS тип структуры, FatFs указатель на тип FATFS.
FATFS *fs=FatFs; // fs указатель на тип FATFS, которому присваеваем адрес FatFs.
получаеться если адрес = 0 то получаем return FR_NOT_ENABLED ?
я не знаю, какими именно исходниками Чена Вы пользуетесь.
Просмотрел немного, функция монтирования у него используется как для монтирования, так и для размонтирования диска.
static
FATFS *FatFs; /* Pointer to the file system object (logical drive) */
это глобальный указатель для файловой системы, из функций к нему добираются с помощью локальных указателей fs
FRESULT pf_mount (
FATFS *fs /* Pointer to new file system object (NULL: Unmount) */
)
{
BYTE fmt, buf[36];
DWORD bsect, fsize, tsect, mclst;
FatFs = 0;
if (!fs) return FR_OK;
если вызвать эту функцию с нулевым указателем, происходит размонтирование диска, обнуление глобального и выход
Если вызвать функцию с любым числом, отличным от 0, происходит заполнение fs
информацией с карточки (о ее файловой системе)
if (disk_initialize() & STA_NOINIT) /* Check if the drive is ready or not */
return FR_NOT_READY;
если диск неудачно проинициализировался, выход
fmt = check_fs(buf, bsect); - здесь читаем инфу с 0 сектора
в fs
и в самом конце функции
FatFs = fs;
глобальный указатель инициируется от локального
return FR_OK;
ну и бинго.
urry писал(а):как же оно заработало, если функцией опен происходит только поиск файла с именем в аргументах и заполнение данных?
Запись файла через write .
ну там FA CREATE_ALWAYS, создает файл, если есть перезаписывает его.
смотрю на ноуте файл есть )
#define N_FATS 2 /* Number of FAT copies (1 or 2) */
и сделал дамп своей памяти. создается две копии фата но, в одну заносятся имена файлов, а в другую нет. Пытаюсь понять это ошибка Чана или так и должно быть. Может кто подскажет где именно имя файла записывается в файловую таблицу.
urry писал(а):как же оно заработало, если функцией опен происходит только поиск файла с именем в аргументах и заполнение данных?
Запись файла через write .
fopen() не просто открывает файл, но и создает его. Попробуйте открыть из закрыть файл без записи в него. Должен получится "пустой" файл нулевой длины.