Окружение AVR-DOS — различия между версиями
MiBBiM (обсуждение | вклад) (заготовка для перевода) |
MiBBiM (обсуждение | вклад) м (орфография) |
||
| (не показано 39 промежуточных версий этого же участника) | |||
| Строка 1: | Строка 1: | ||
| − | '''Окружение AVR-DOS''' — конфигурация системы | + | [[Категория:AVR-DOS]] |
| + | '''Окружение AVR-DOS''' — конфигурация системы [[AVR-DOS]] применительно к данному микроконтроллеру. | ||
| − | |||
== Конфигурация файловой системы == | == Конфигурация файловой системы == | ||
Задается файлом '''config_avr-dos.bas'''. | Задается файлом '''config_avr-dos.bas'''. | ||
| Строка 9: | Строка 9: | ||
! Значение | ! Значение | ||
|- | |- | ||
| − | |cFileHandles | + | | cFileHandles |
| − | | | + | | Количество заразервированных идентификаторов файлового потока, каждый занимает 538 Байт. |
| − | |||
| − | |||
|- | |- | ||
| − | |cSepFATHandle | + | | cSepFATHandle |
| − | | | + | | Для увеличения производительности файловой системы, информация о разделе может быть сохранена в буфер ОЗУ, занимая в нем дополнительные 517 Байт, см. [[#FAT буфер (517 Байт)|FAT буфер]]<br/> |
| − | + | '''1''' - использовать буфер<br/> | |
| − | + | '''0''' - не использовать буфер | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
|- | |- | ||
|cFATDirSaveAtEnd | |cFATDirSaveAtEnd | ||
| − | | | + | |Частота записи информации раздела и директории во время изменения файла. Опция может увеличить('''1''') или уменьшить ('''0''') скорость записи секотров через уменьшение/увеличение количества перезаписи информации о разделе и директории.<br/> |
| − | + | '''Не забывайте вызывать процедуру [[Дополнительные команды AVR-DOS#Flush|FLUSH]] чтобы сбросить изменения на диск!'''<br/> | |
| − | + | '''0''' - обновление информации о директории, разделе и дисковой копии файла при каждом его изменении.<br/> | |
| − | + | '''1''' - обновление информации о директории и разделе только при вызове процедур [[Основные команды AVR-DOS#Close|CLOSE]] и [[Дополнительные команды AVR-DOS#Flush|FLUSH]]. | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
|- | |- | ||
|cTextQuotationMarks | |cTextQuotationMarks | ||
| − | | | + | |Сопутствующие строки в кавычках при вызове команды [[Основные команды AVR-DOS#Write|WRITE]] (напр, Write "Text").''' «или при записи в файл,т.е. предсталвение в файле??»'''<br/> |
| − | + | '''0''' - Запрещается использование сопутствующих строк<br/> | |
| − | WRITE | + | '''1''' - Разрешается использование сопутствующих строк |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
|- | |- | ||
|cFATSecondUpdate | |cFATSecondUpdate | ||
| − | |Suppress updating of second FAT. Windows accepts a not | + | |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.<br/> |
| − | + | 0 = Second FAT is not updated<br/> | |
| − | 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 | ||
| − | |||
1 = Second FAT is updated if exist [default] | 1 = Second FAT is updated if exist [default] | ||
|- | |- | ||
|cVariableSeparator | |cVariableSeparator | ||
| − | | | + | |Символ для разделения ASCII данных в файле или RS-232 интерфейсе, записываемых (читаемых) командой [[Основные команды AVR-DOS#Write|WRITE]]([[Основные команды AVR-DOS#Input|INPUT]]). Обычно используется запятая (''','''), но она может быть заменена на другие символы, например символ табуляции(ASCII, код 9), используемый в файлах EXCEL.<br/> |
| − | + | '''44''' - запятая [по умолчанию], файл выглядит как <code>''"abc",10''</code><br/> | |
| − | + | '''9''' - табуляция, файл выглядит как <code>''"abc" 10''</code> | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | 9 | ||
|} | |} | ||
== Использование памяти файловой системой == | == Использование памяти файловой системой == | ||
| − | === | + | === Основная информация о системе (35 Байт) === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
| Строка 101: | Строка 49: | ||
|gbDOSError | |gbDOSError | ||
|Byte | |Byte | ||
| − | | | + | |Содержит код ошибки, см. [[#Коды ошибок|коды ошибок]] |
|- | |- | ||
|gbFileSystem | |gbFileSystem | ||
|Byte | |Byte | ||
| − | |File System Code | + | |File System Code из Master Boot Record |
|- | |- | ||
|gbFileSystemStatus | |gbFileSystemStatus | ||
|Byte | |Byte | ||
| − | | | + | |Содержит информацию о типе файловой системы (FAT16 или FAT32) |
|- | |- | ||
|glFATFirstSector | |glFATFirstSector | ||
|Long | |Long | ||
| − | | | + | |Номер первого сектора форматированной области на диске'''«(везде в этой таблице используется Card. специально?)»''' |
|- | |- | ||
|gbNumberOfFATs | |gbNumberOfFATs | ||
|Byte | |Byte | ||
| − | | | + | |Количество копий FAT'''(«Count of FAT copies»)''' |
|- | |- | ||
|glSectorsPerFat | |glSectorsPerFat | ||
|Long | |Long | ||
| − | | | + | |Количество секторов на каждый раздел'''(«Count of Sectors per FAT»)''' |
|- | |- | ||
|glRootFirstSector | |glRootFirstSector | ||
|Long | |Long | ||
| − | | | + | |Номер первого сектора Root Area на диске |
|- | |- | ||
|gwRootEntries | |gwRootEntries | ||
|Word | |Word | ||
| − | | | + | |Количество Root Entries |
|- | |- | ||
|glDataFirstSector | |glDataFirstSector | ||
|Long | |Long | ||
| − | | | + | |Номер первого сектора Data Area на диске |
|- | |- | ||
|gbSectorsPerCluster | |gbSectorsPerCluster | ||
|Byte | |Byte | ||
| − | | | + | |Количество секторов в кластере |
|- | |- | ||
|glMaxClusterNumber | |glMaxClusterNumber | ||
|Long | |Long | ||
| − | | | + | |Максимальный номер кластера |
|- | |- | ||
|glLastSearchedCluster | |glLastSearchedCluster | ||
|Long | |Long | ||
| − | | | + | |Последний номер кластера, помеченного как свободный |
|- | |- | ||
|glFS_Temp1 | |glFS_Temp1 | ||
|Long | |Long | ||
| − | | | + | |Временная переменная для файловой системы |
|} | |} | ||
| − | === | + | === Директория (559 Байт) === |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
| Строка 161: | Строка 109: | ||
|glDirFirstSectorNumber | |glDirFirstSectorNumber | ||
|Long | |Long | ||
| − | | | + | |Номер первого сектора текущей директории |
|- | |- | ||
|gwFreeDirEntry | |gwFreeDirEntry | ||
| Строка 173: | Строка 121: | ||
|gsDir0TempFileName | |gsDir0TempFileName | ||
|String*11 | |String*11 | ||
| − | | | + | |Временная переменная для имени файла |
|- | |- | ||
|gwDir0Entry | |gwDir0Entry | ||
| Строка 193: | Строка 141: | ||
|glDirSectorNumber | |glDirSectorNumber | ||
|Long | |Long | ||
| − | | | + | |Номер текущего сектора |
|- | |- | ||
|gbDirBufferStatus | |gbDirBufferStatus | ||
| Строка 204: | Строка 152: | ||
|} | |} | ||
| − | === FAT === | + | === FAT буфер (517 Байт) === |
| − | FAT | + | FAT буфер создается только если [[#Конфигурация файловой системы|cSepFATHandle]] = 1 |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
| Строка 214: | Строка 162: | ||
|glFATSectorNumber | |glFATSectorNumber | ||
|Long | |Long | ||
| − | |Number of current loaded FAT sector | + | |Номер текущего FAT раздела '''«(Number of current loaded FAT sector)»''' |
|- | |- | ||
|gbFATBufferStatus | |gbFATBufferStatus | ||
| Строка 222: | Строка 170: | ||
|gbFATBuffer | |gbFATBuffer | ||
|Byte(512) | |Byte(512) | ||
| − | | | + | |Буфер FAT раздела '''«buffer for FAT sector»''' |
|} | |} | ||
| − | === | + | === Идентификация файловых потоков === |
| − | + | Каждый идентификатор фалового потока занимает 538 Байт в переменной '''abFileHandle''', являющейся массивом размера (538 * cFileHandles) | |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
| Строка 235: | Строка 183: | ||
|FileNumber | |FileNumber | ||
|Byte | |Byte | ||
| − | | | + | |Идентификатор файлового потока |
| − | |||
| − | |||
|- | |- | ||
|FileMode | |FileMode | ||
|Byte | |Byte | ||
| − | | | + | |Режим открытия файла |
|- | |- | ||
|FileDirEntry | |FileDirEntry | ||
| Строка 253: | Строка 199: | ||
|FileFirstCluster | |FileFirstCluster | ||
|Word | |Word | ||
| − | | | + | |Первый кластер |
|- | |- | ||
|FileSize | |FileSize | ||
|Long | |Long | ||
| − | | | + | |Размер файла в Байтах |
|- | |- | ||
|FilePosition | |FilePosition | ||
|Long | |Long | ||
| − | | | + | |Позиция курсора '''«(next read/write) 0-based»''' |
|- | |- | ||
|FileSectorNumber | |FileSectorNumber | ||
|Long | |Long | ||
| − | | | + | |Номер текущего сектора |
|- | |- | ||
|FileBufferStatus | |FileBufferStatus | ||
| Строка 280: | Строка 226: | ||
|} | |} | ||
| − | == | + | == Коды ошибок == |
| + | Хранятся в переменной [[#Основная информация о системе (35 Байт)|gbDOSError]]. | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
| Строка 289: | Строка 236: | ||
|0 | |0 | ||
|cpNoError | |cpNoError | ||
| − | | | + | |Нет ошибки |
|- | |- | ||
|1 | |1 | ||
|cpEndOfFile | |cpEndOfFile | ||
| − | | | + | |Попытка чтения файла за пределами его конца |
|- | |- | ||
|17 | |17 | ||
|cpNoMBR | |cpNoMBR | ||
| − | | | + | |Сектор 0 на диске не является главной загрузочной записью (MBR) |
|- | |- | ||
|18 | |18 | ||
|cpNoPBR | |cpNoPBR | ||
| − | | | + | |Таблица секторов(Partition Sector) недоступна |
|- | |- | ||
|19 | |19 | ||
|cpFileSystemNotSupported | |cpFileSystemNotSupported | ||
| − | | | + | |Неподдерживаемая файловая система, поддерживается только FAT16 и FAT32 |
|- | |- | ||
|20 | |20 | ||
|cpSectorSizeNotSupported | |cpSectorSizeNotSupported | ||
| − | | | + | |Неподдерживаемый размер сектора, поддерживаются сектора 512 Байт. |
|- | |- | ||
|21 | |21 | ||
|cpSectorsPerClusterNotSupported | |cpSectorsPerClusterNotSupported | ||
| − | | | + | |Подддерживаются только 1, 2, 4, 8, 16, 32, 64 секторов в кластере. Это нормальные значения для отформатированного раздела. Экзотические размеры кластера, не делящиеся нацело на 2, не поддерживаются |
|- | |- | ||
|22 | |22 | ||
|cpCountOfClustersNotSupported | |cpCountOfClustersNotSupported | ||
| − | | | + | |Данное количество разделов не поддерживается (поддерживается только 1 или 2 раздела) |
| + | '''«Count of FAT (valid is 1 or 2) not supported (will be renamed with one of next release)»''' | ||
|- | |- | ||
|33 | |33 | ||
|cpNoNextCluster | |cpNoNextCluster | ||
| − | | | + | |Следующий кластер файла недоступен '''«Error in file cluster chain»''' |
|- | |- | ||
|34 | |34 | ||
|cpNoFreeCluster | |cpNoFreeCluster | ||
| − | | | + | |Нет свободных кластеров'''«(cluster)»''', диск заполнен |
|- | |- | ||
|35 | |35 | ||
|cpClusterError | |cpClusterError | ||
| − | | | + | |Ошибка чтения кластера файла '''«Error in file cluster chain»''' |
|- | |- | ||
|49 | |49 | ||
|cpNoFreeDirEntry | |cpNoFreeDirEntry | ||
| − | | | + | |Директория заполнена '''«Directory full»''' |
|- | |- | ||
|50 | |50 | ||
|cpFileExist | |cpFileExist | ||
| − | | | + | |Такой файл уже существует (неверное имя при переименовании)'''«(сам придумал)»''' |
|- | |- | ||
|51 | |51 | ||
|cpFileDeleteNotAllowed | |cpFileDeleteNotAllowed | ||
| − | | | + | |Удаление файла запрещено его атрибутами (файл скрытый, системный или только для чтения) |
|- | |- | ||
|52 | |52 | ||
|cpSubDirectoryNotEmpty | |cpSubDirectoryNotEmpty | ||
| − | | | + | |Невозможно удалить каталог, он не пуст. |
|- | |- | ||
|53 | |53 | ||
| Строка 353: | Строка 301: | ||
|54 | |54 | ||
|cpNoASubDirectory | |cpNoASubDirectory | ||
| − | | | + | |Имя не соотвествует каталогу, это файл. |
|- | |- | ||
|65 | |65 | ||
|cpNoFreeFileNumber | |cpNoFreeFileNumber | ||
| − | | | + | |Нет свободных идентификаторов файлового потока (возможно открыть не более 255 файлов одновременно) |
|- | |- | ||
|66 | |66 | ||
|cpFileNotFound | |cpFileNotFound | ||
| − | | | + | |Файл не найден |
|- | |- | ||
|67 | |67 | ||
|cpFileNumberNotFound | |cpFileNumberNotFound | ||
| − | | | + | |Такой идентификатор файлового потока не существует |
|- | |- | ||
|68 | |68 | ||
|cpFileOpenNoHandle | |cpFileOpenNoHandle | ||
| − | | | + | |Все идентификаторы файлового потока неверны '''«All file handles occupied»''' |
|- | |- | ||
|69 | |69 | ||
|cpFileOpenHandleInUse | |cpFileOpenHandleInUse | ||
| − | | | + | |Такой идентификатор файлового потока уже используется, невозможно создать новый поток с таким идентификатором |
|- | |- | ||
|70 | |70 | ||
| − | |cpFileOpenShareConflict | + | |cpFileOpenShareConflict |
| − | | | + | |Невозможно получить доступ к файлу(напр, одновременне открытие для записи и чтения) |
|- | |- | ||
|71 | |71 | ||
|cpFileInUse | |cpFileInUse | ||
| − | | | + | |Невозможно удалить файл, использующийся в данный момент |
|- | |- | ||
|72 | |72 | ||
|cpFileReadOnly | |cpFileReadOnly | ||
| − | | | + | |Невозможно произвести запись, файл только для чтения. |
|- | |- | ||
|73 | |73 | ||
|cpFileNoWildCardAllowed | |cpFileNoWildCardAllowed | ||
| − | | | + | |Специальные символы(WildCards) не разрешены при использовании данной функции |
|- | |- | ||
|74 | |74 | ||
|CpFileNumberInvalid | |CpFileNumberInvalid | ||
| − | | | + | |Файловый идентификатор не поддерживается (напр, '''0''') |
|- | |- | ||
|97 | |97 | ||
|cpFilePositionError | |cpFilePositionError | ||
| − | | | + | |Позиция курсора неверна '''(«сам придумал»)''' |
|- | |- | ||
|98 | |98 | ||
|cpFileAccessError | |cpFileAccessError | ||
| − | | | + | |Функция не может выполнятся в текущем [[Окружение AVR-DOS#Использование команд ввода-вывода в различных режимах|режиме открытия]] файла |
|- | |- | ||
|99 | |99 | ||
|cpInvalidFilePosition | |cpInvalidFilePosition | ||
| − | | | + | |Новая позиция курсора неверна (отрицательное значение или '''0''') '''«в описании идентификаторов сказано что нумерация с нуля. кто же прав?»''' |
|- | |- | ||
|100 | |100 | ||
|cpFileSizeToGreat | |cpFileSizeToGreat | ||
| − | | | + | |Размер файла слишком большой для использования функции BLoad |
|} | |} | ||
| Строка 479: | Строка 427: | ||
|} | |} | ||
| − | == | + | == Использование команд ввода-вывода в различных режимах == |
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
| − | ! | + | !Команда |
!Input | !Input | ||
!Output | !Output | ||
| Строка 489: | Строка 437: | ||
!Binary | !Binary | ||
|- | |- | ||
| − | | | + | |[[Дополнительные команды AVR-DOS#FileAttr|FileAttr]] |
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
| Строка 495: | Строка 443: | ||
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
|- | |- | ||
| − | |Close | + | |[[Основные команды AVR-DOS#Close|Close]] |
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
| Строка 501: | Строка 449: | ||
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
|- | |- | ||
| − | |Put | + | |[[Дополнительные команды AVR-DOS#Put|Put]] |
| | | | ||
| | | | ||
| Строка 507: | Строка 455: | ||
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
|- | |- | ||
| − | |Get | + | |[[Дополнительные команды AVR-DOS#Get|Get]] |
| | | | ||
| | | | ||
| Строка 513: | Строка 461: | ||
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
|- | |- | ||
| − | |LOF | + | |[[Основные команды AVR-DOS#LOF|LOF]] |
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
| Строка 519: | Строка 467: | ||
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
|- | |- | ||
| − | |LOC | + | |[[Дополнительные команды AVR-DOS#LOC|LOC]] |
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
| Строка 525: | Строка 473: | ||
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
|- | |- | ||
| − | |EOF | + | |[[Основные команды AVR-DOS#EOF|EOF]] |
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
| − | |<ref name="EOF"> | + | |<ref name="EOF">Позиция курсора в конце файла</ref> |
| − | |<ref name="EOF"> | + | |<ref name="EOF">Позиция курсора в конце файла</ref> |
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
|- | |- | ||
| − | | | + | |[[Дополнительные команды AVR-DOS#Seek|Seek (Get Position)]] |
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
| − | |<nowiki>+</nowiki><ref name="EOF"> | + | |<nowiki>+</nowiki><ref name="EOF">Позиция курсора в конце файла</ref> |
| − | |<nowiki>+</nowiki><ref name="EOF"> | + | |<nowiki>+</nowiki><ref name="EOF">Позиция курсора в конце файла</ref> |
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
|- | |- | ||
| − | | | + | |[[Дополнительные команды AVR-DOS#Seek|Seek (Set Position)]] |
| | | | ||
| | | | ||
| Строка 543: | Строка 491: | ||
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
|- | |- | ||
| − | |Line Input | + | |[[Основные команды AVR-DOS#Line Input|Line Input]] |
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
| | | | ||
| Строка 549: | Строка 497: | ||
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
|- | |- | ||
| − | |Print | + | |[[Основные команды AVR-DOS#Print|Print]] |
| | | | ||
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
| Строка 555: | Строка 503: | ||
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
|- | |- | ||
| − | |Input | + | |[[Основные команды AVR-DOS#Input|Input]] |
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
| | | | ||
| Строка 561: | Строка 509: | ||
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
|- | |- | ||
| − | |Write | + | |[[Основные команды AVR-DOS#Write|Write]] |
| | | | ||
|<nowiki>+</nowiki> | |<nowiki>+</nowiki> | ||
| Строка 571: | Строка 519: | ||
<references /> | <references /> | ||
| − | + | Поддерживаемые выражения и функции: | |
| − | |||
<code>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</code> | <code>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</code> | ||
Текущая версия на 05:26, 15 мая 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