Окружение AVR-DOS — различия между версиями
MiBBiM (обсуждение | вклад) (→Конфигурация файловой системы) |
MiBBiM (обсуждение | вклад) м (→Конфигурация файловой системы) |
||
Строка 21: | Строка 21: | ||
'''Не забывайте вызывать процедуру [[Дополнительные команды AVR-DOS#Flush|FLUSH]] чтобы сбросить изменения на диск!'''<br/> | '''Не забывайте вызывать процедуру [[Дополнительные команды AVR-DOS#Flush|FLUSH]] чтобы сбросить изменения на диск!'''<br/> | ||
'''0''' - обновление информации о директории, разделе и дисковой копии файла при каждом его изменении.<br/> | '''0''' - обновление информации о директории, разделе и дисковой копии файла при каждом его изменении.<br/> | ||
− | '''1''' - обновление информации о директории и разделе только при вызове процедур [[ | + | '''1''' - обновление информации о директории и разделе только при вызове процедур [[Основные команды AVR-DOS#Close|CLOSE]] и [[Дополнительные команды AVR-DOS#Flush|FLUSH]]. |
|- | |- | ||
|cTextQuotationMarks | |cTextQuotationMarks |
Версия 08:30, 9 января 2009
Окружение AVR-DOS — конфигурация системы AVR-DOS применительно к на данному микроконтроллеру.
Содержание
Конфигурация файловой системы
Задается файлом config_avr-dos.bas.
Параметр | Значение |
---|---|
cFileHandles | Количество заразервированных идентификаторов файлового потока, каждый занимает 538 Байт. |
cSepFATHandle | Для увеличения производительности файловой системы, информация о разделе может быть сохранена в буфер ОЗУ, занимая в нем дополнительные 517 Байт, см. FAT буфер 1 - использовать буфер |
cFATDirSaveAtEnd | Частота записи информации раздела и директории во время изменения файла. Опция может увеличить(1) или уменьшить (0) скорость записи секотров через уменьшение/увеличение количества перезаписи информации о разделе и директории. Не забывайте вызывать процедуру FLUSH чтобы сбросить изменения на диск! |
cTextQuotationMarks | Сопутствующие строки в кавычках при вызове команды WRITE (напр, Write "Text"). «или при записи в файл,т.е. предсталвение в файле??» 0 - Запрещается использование сопутствующих строк |
cFATSecondUpdate | Suppress updating of second FAT. Windows accepts a not updated second FAT PC-Command: chkdsk /f corrects the second FAT, it overwrites the second FAT with the first FAT set this parameter to 0 for high speed continuing saving data. 0 = Second FAT is not updated |
cVariableSeparator | Символ для разделения ASCII данных в файле или RS-232 интерфейсе, записываемых (читаемых) командой WRITE(INPUT). Обычно используется запятая (,), но она может быть заменена на другие символы, например символ табуляции(ASCII, код 9), используемый в файлах EXCEL. 44 - запятая [по умолчанию], файл выглядит как |
Использование памяти файловой системой
Основная информация о системе (35 Байт)
Параметр | Тип | Использование |
---|---|---|
gbDOSError | Byte | Содержит код ошибки, см. коды ошибок |
gbFileSystem | Byte | File System Code из Master Boot Record |
gbFileSystemStatus | Byte | Содержит информацию о типе файловой системы (FAT16 или FAT32) |
glFATFirstSector | Long | Номер первого сектора форматированной области на диске«(везде в этой таблице используется Card. специально?)» |
gbNumberOfFATs | Byte | Количество копий FAT(«Count of FAT copies») |
glSectorsPerFat | Long | Количество секторов на каждый раздел(«Count of Sectors per FAT») |
glRootFirstSector | Long | Номер первого сектора Root Area на диске |
gwRootEntries | Word | Количество Root Entries |
glDataFirstSector | Long | Номер первого сектора Data Area на диске |
gbSectorsPerCluster | Byte | Количество секторов в кластере |
glMaxClusterNumber | Long | Максимальный номер кластера |
glLastSearchedCluster | Long | Последний номер кластера, помеченного как свободный |
glFS_Temp1 | Long | Временная переменная для файловой системы |
Директория (559 Байт)
Параметр | Тип | Использование |
---|---|---|
glDirFirstSectorNumber | Long | Номер первого сектора текущей директории |
gwFreeDirEntry | Word | Number of first free Dir-Entry |
glFreeDirSectorNumber | Long | Number of Sector number with first free Directory Entry |
gsDir0TempFileName | String*11 | Временная переменная для имени файла |
gwDir0Entry | Word | Temporary Buffer for Directory Entry Number |
glDir0SectorNumber | Long | Temporary Buffer for Directory Sector Number |
gsTempFileName | String*11 | Hold file name for directory search |
gwDirRootEntry | Word | Number of last handled directory entry |
glDirSectorNumber | Long | Номер текущего сектора |
gbDirBufferStatus | Byte | Sector Buffer Status |
gbDirBuffer | Byte (512) | Buffer for directory Sector |
FAT буфер (517 Байт)
FAT буфер создается только если cSepFATHandle = 1
Параметр | Тип | Использование |
---|---|---|
glFATSectorNumber | Long | Номер текущего FAT раздела «(Number of current loaded FAT sector)» |
gbFATBufferStatus | Byte | Buffer status |
gbFATBuffer | Byte(512) | Буфер FAT раздела «buffer for FAT sector» |
Идентификация файловых потоков
Каждый идентификатор фалового потока занимает 538 Байт в переменной abFileHandle, являющейся массивом размера (538 * cFileHandles)
Параметр | Тип | Использование |
---|---|---|
FileNumber | Byte | Идентификатор файлового потока |
FileMode | Byte | Режим открытия файла |
FileDirEntry | Word | Number of directory entry |
FileDirSectorNumber | Long | Number of Sector which holds the Directory entry of the file |
FileFirstCluster | Word | Первый кластер |
FileSize | Long | Размер файла в Байтах |
FilePosition | Long | Позиция курсора «(next read/write) 0-based» |
FileSectorNumber | Long | Номер текущего сектора |
FileBufferStatus | Byte | buffer Status |
FileBuffer | Byte(512) | buffer for the file sector |
SectorTerminator | Byte | additional 00 Byte (string terminator) for direct reading ASCII files from the buffer |
Коды ошибок
Хранятся в переменной gbDOSError.
Код | Имя в компиляторе | Объяснение |
---|---|---|
0 | cpNoError | Нет ошибки |
1 | cpEndOfFile | Попытка чтения файла за пределами его конца |
17 | cpNoMBR | Сектор 0 на диске не является главной загрузочной записью (MBR) |
18 | cpNoPBR | Таблица секторов(Partition Sector) недоступна |
19 | cpFileSystemNotSupported | Неподдерживаемая файловая система, поддерживается только FAT16 и FAT32 |
20 | cpSectorSizeNotSupported | Неподдерживаемый размер сектора, поддерживаются сектора 512 Байт. |
21 | cpSectorsPerClusterNotSupported | Подддерживаются только 1, 2, 4, 8, 16, 32, 64 секторов в кластере. Это нормальные значения для отформатированного раздела. Экзотические размеры кластера, не делящиеся нацело на 2, не поддерживаются |
22 | cpCountOfClustersNotSupported | Данное количество разделов не поддерживается (поддерживается только 1 или 2 раздела)
«Count of FAT (valid is 1 or 2) not supported (will be renamed with one of next release)» |
33 | cpNoNextCluster | Следующий кластер файла недоступен «Error in file cluster chain» |
34 | cpNoFreeCluster | Нет свободных кластеров«(cluster)», диск заполнен |
35 | cpClusterError | Ошибка чтения кластера файла «Error in file cluster chain» |
49 | cpNoFreeDirEntry | Директория заполнена «Directory full» |
50 | cpFileExist | Такой файл уже существует (неверное имя при переименовании)«(сам придумал)» |
51 | cpFileDeleteNotAllowed | Удаление файла запрещено его атрибутами (файл скрытый, системный или только для чтения) |
52 | cpSubDirectoryNotEmpty | Невозможно удалить каталог, он не пуст. |
53 | cpSubDirectoryError | General error at handling with sub-directory |
54 | cpNoASubDirectory | Имя не соотвествует каталогу, это файл. |
65 | cpNoFreeFileNumber | Нет свободных идентификаторов файлового потока (возможно открыть не более 255 файлов одновременно) |
66 | cpFileNotFound | Файл не найден |
67 | cpFileNumberNotFound | Такой идентификатор файлового потока не существует |
68 | cpFileOpenNoHandle | Все идентификаторы файлового потока неверны «All file handles occupied» |
69 | cpFileOpenHandleInUse | Такой идентификатор файлового потока уже используется, невозможно создать новый поток с таким идентификатором |
70 | cpFileOpenShareConflict | Невозможно получить доступ к файлу(напр, одновременне открытие для записи и чтения) |
71 | cpFileInUse | Невозможно удалить файл, использующийся в данный момент |
72 | cpFileReadOnly | Невозможно произвести запись, файл только для чтения. |
73 | cpFileNoWildCardAllowed | Специальные символы(WildCards) не разрешены при использовании данной функции |
74 | CpFileNumberInvalid | Файловый идентификатор не поддерживается (напр, 0) |
97 | cpFilePositionError | Позиция курсора неверна («сам придумал») |
98 | cpFileAccessError | Функция не может выполнятся в текущем режиме открытия файла |
99 | cpInvalidFilePosition | Новая позиция курсора неверна (отрицательное значение или 0) «в описании идентификаторов сказано что нумерация с нуля. кто же прав?» |
100 | cpFileSizeToGreat | Размер файла слишком большой для использования функции BLoad |
Buffer Status: Bit definitions of Buffer Status Byte (Directory, FAT and File)
Bit | DIR | FAT | File | Compiler Alias | Remark |
---|---|---|---|---|---|
0 (LSB) | + | dFATDirSaveAnyWay | Status Bit which is set from CLOSE and FLUSh statement, to show AVR-DOS to save FAT and Directory Sectors | ||
1 | + | dEOF | End of File | ||
2 | + | dEOFinSector | End of File in this sector (= last sector loaded) | ||
3 | + | + | + | dWritePending | Something was written to sector, it must be saved to Card, before loading next sector |
4 | + | dFATSector | This is an FAT Sector, at writing to Card, Number of FAT copies must be checked and copy updated if necessary | ||
5 | + | dFileEmpty | File is empty, no sector (Cluster) is allocated in FAT to this file | ||
6 | + | dFATDIRWritePending | For this file FAT or directory was updated | ||
7 | + | dFATDirSaveAtEnd | Indicates, that FAT and Directory Information have only to be updated at FLUSH and CLOSE staements |
Использование команд ввода-вывода в различных режимах
Команда | Input | Output | Append | Binary |
---|---|---|---|---|
FileAttr | + | + | + | + |
Close | + | + | + | + |
Put | + | |||
Get | + | |||
LOF | + | + | + | + |
LOC | + | + | + | + |
EOF | + | [1] | [1] | + |
Seek (Get Position) | + | +[1] | +[1] | + |
Seek (Set Position) | + | |||
Line Input | + | + | ||
+ | + | + | ||
Input | + | + | ||
Write | + | + | + |
Поддерживаемые выражения и функции:
INITFILESYSTEM , OPEN , CLOSE, FLUSH , PRINT, LINE INPUT, LOC, LOF , EOF , FREEFILE , FILEATTR , SEEK , BSAVE , BLOAD , KILL , DISKFREE , DISKSIZE , GET , PUT ,FILEDATE , FILETIME , FILEDATETIME , DIR , FILELEN , WRITE , INPUT