Окружение AVR-DOS — различия между версиями

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск
м (Validity of the file I/O operations regarding the opening modes)
м (орфография)
 
(не показано 37 промежуточных версий этого же участника)
Строка 1: Строка 1:
'''Окружение AVR-DOS''' — конфигурация системы  
+
[[Категория:AVR-DOS]]
 +
'''Окружение AVR-DOS''' — конфигурация системы [[AVR-DOS]] применительно к данному микроконтроллеру.
  
[[AVR-DOS]] применительно к на данному микроконтроллеру.
 
 
== Конфигурация файловой системы ==
 
== Конфигурация файловой системы ==
 
Задается файлом '''config_avr-dos.bas'''.
 
Задается файлом '''config_avr-dos.bas'''.
Строка 9: Строка 9:
 
! Значение
 
! Значение
 
|-
 
|-
|cFileHandles
+
| cFileHandles
|Count of Filehandles: for each file opened at same
+
| Количество заразервированных идентификаторов файлового потока, каждый занимает 538 Байт.
 
 
time, a filehandle buffer of 538 Bytes is needed
 
 
|-
 
|-
|cSepFATHandle
+
| cSepFATHandle
|For higher speed in handling file operations the FAT
+
| Для увеличения производительности файловой системы, информация о разделе может быть сохранена в буфер ОЗУ, занимая в нем дополнительные 517 Байт, см. [[#FAT буфер (517 Байт)|FAT буфер]]<br/>
 
+
'''1''' - использовать буфер<br/>
info can be stored in an own buffer, which needs
+
'''0''' - не использовать буфер
 
 
additional 517 Bytes.
 
 
 
Assign Constant cSepFATHandle with 1, if wanted,
 
 
 
otherwise with 0.
 
 
|-
 
|-
 
|cFATDirSaveAtEnd
 
|cFATDirSaveAtEnd
|Handling of saving changed FAT and Directory
+
|Частота записи информации раздела и директории во время изменения файла. Опция может увеличить('''1''') или уменьшить ('''0''') скорость записи секотров через уменьшение/увеличение количества перезаписи информации о разделе и директории.<br/>
 
+
'''Не забывайте вызывать процедуру [[Дополнительные команды AVR-DOS#Flush|FLUSH]] чтобы сбросить изменения на диск!'''<br/>
Information of a open file for output.  
+
'''0''' - обновление информации о директории, разделе и дисковой копии файла при каждом его изменении.<br/>
 
+
'''1''' - обновление информации о директории и разделе только при вызове процедур [[Основные команды AVR-DOS#Close|CLOSE]] и [[Дополнительные команды AVR-DOS#Flush|FLUSH]].
Parameter 0 saves FAT and Directory information with
 
 
 
every saving of a data sector
 
 
 
Parameter 1 saves FAT and Directory Information only at
 
 
 
the CLOSE and FLUSH statement. This option increases the
 
 
 
writing speed of data and decreases the write frequency
 
 
 
of FAT and Directory Sectors
 
 
|-
 
|-
 
|cTextQuotationMarks
 
|cTextQuotationMarks
|Surrounding String with Quotation Marks at the Command
+
|Сопутствующие строки в кавычках при вызове команды [[Основные команды AVR-DOS#Write|WRITE]] (напр, Write "Text").''' «или при записи в файл,т.е. предсталвение в файле??»'''<br/>
 
+
'''0''' - Запрещается использование сопутствующих строк<br/>
WRITE
+
'''1''' - Разрешается использование сопутствующих строк
 
 
0 = No Surrounding of strings with quotation.marks
 
 
 
1 = Surrounding of strings with quotation.marks (f.E.  
 
 
 
"Text")
 
 
|-
 
|-
 
|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
|Character to separate ASCII Values in WRITE - statement
+
|Символ для разделения ASCII данных в файле или RS-232 интерфейсе, записываемых (читаемых) командой [[Основные команды AVR-DOS#Write|WRITE]]([[Основные команды AVR-DOS#Input|INPUT]]). Обычно используется запятая (''','''), но она может быть заменена на другие символы, например символ табуляции(ASCII, код 9), используемый в файлах EXCEL.<br/>
 
+
'''44''' - запятая [по умолчанию], файл выглядит как <code>''"abc",10''</code><br/>
(and INPUT)
+
'''9''' - табуляция, файл выглядит как <code>''"abc"  10''</code>
 
 
Normally a comma (,) is used, but it can be changed to
 
 
 
other values, f.E. to TAB (ASCII-Code 9) if EXCEL Files
 
 
 
with Tab separated values should be written or read.  
 
 
 
This parameter works for WRITE and INPUT
 
 
 
Parameter value is the ASSCII-Code of the separator
 
 
 
44 = comma [default]
 
9 = TAB
 
 
|}
 
|}
  
 
== Использование памяти файловой системой ==
 
== Использование памяти файловой системой ==
=== General File System information (35 Bytes) ===
+
=== Основная информация о системе (35 Байт) ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Строка 101: Строка 49:
 
|gbDOSError
 
|gbDOSError
 
|Byte
 
|Byte
|holds DOS Error of last file handling routine
+
|Содержит код ошибки, см. [[#Коды ошибок|коды ошибок]]
 
|-
 
|-
 
|gbFileSystem
 
|gbFileSystem
 
|Byte
 
|Byte
|File System Code from Master Boot Record
+
|File System Code из Master Boot Record
 
|-
 
|-
 
|gbFileSystemStatus
 
|gbFileSystemStatus
 
|Byte
 
|Byte
|Holds Information about FAT Type (16 or 32)
+
|Содержит информацию о типе файловой системы (FAT16 или FAT32)
 
|-
 
|-
 
|glFATFirstSector
 
|glFATFirstSector
 
|Long
 
|Long
|Number of first Sector of FAT Area on the Card
+
|Номер первого сектора форматированной области на диске'''«(везде в этой таблице используется Card. специально?)»'''
 
|-
 
|-
 
|gbNumberOfFATs
 
|gbNumberOfFATs
 
|Byte
 
|Byte
|Count of FAT copies
+
|Количество копий FAT'''(«Count of FAT copies»)'''
 
|-
 
|-
 
|glSectorsPerFat
 
|glSectorsPerFat
 
|Long
 
|Long
|Count of Sectors per FAT
+
|Количество секторов на каждый раздел'''(«Count of Sectors per FAT»)'''
 
|-
 
|-
 
|glRootFirstSector
 
|glRootFirstSector
 
|Long
 
|Long
|Number of first Sector of Root Area on the Card
+
|Номер первого сектора Root Area на диске
 
|-
 
|-
 
|gwRootEntries
 
|gwRootEntries
 
|Word
 
|Word
|Count of Root Entries
+
|Количество Root Entries
 
|-
 
|-
 
|glDataFirstSector
 
|glDataFirstSector
 
|Long
 
|Long
|Number of first Sector of Data Area on the Card
+
|Номер первого сектора Data Area на диске
 
|-
 
|-
 
|gbSectorsPerCluster
 
|gbSectorsPerCluster
 
|Byte
 
|Byte
|Count of Sectors per Cluster
+
|Количество секторов в кластере
 
|-
 
|-
 
|glMaxClusterNumber
 
|glMaxClusterNumber
 
|Long
 
|Long
|Highest usable Cluster number
+
|Максимальный номер кластера
 
|-
 
|-
 
|glLastSearchedCluster
 
|glLastSearchedCluster
 
|Long
 
|Long
|Last cluster number found as free
+
|Последний номер кластера, помеченного как свободный
 
|-
 
|-
 
|glFS_Temp1
 
|glFS_Temp1
 
|Long
 
|Long
|temorary Long variable for file system
+
|Временная переменная для файловой системы
 
|}
 
|}
  
=== Directory (559 Bytes) ===
+
=== Директория (559 Байт) ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Строка 161: Строка 109:
 
|glDirFirstSectorNumber
 
|glDirFirstSectorNumber
 
|Long
 
|Long
|Number of first sector of current actual directory
+
|Номер первого сектора текущей директории
 
|-
 
|-
 
|gwFreeDirEntry
 
|gwFreeDirEntry
Строка 173: Строка 121:
 
|gsDir0TempFileName
 
|gsDir0TempFileName
 
|String*11
 
|String*11
|Temporary Buffer for file name
+
|Временная переменная для имени файла
 
|-
 
|-
 
|gwDir0Entry
 
|gwDir0Entry
Строка 193: Строка 141:
 
|glDirSectorNumber
 
|glDirSectorNumber
 
|Long
 
|Long
|Number of current loaded Sector
+
|Номер текущего сектора
 
|-
 
|-
 
|gbDirBufferStatus
 
|gbDirBufferStatus
Строка 204: Строка 152:
 
|}
 
|}
  
=== FAT (517 Bytes) ===
+
=== FAT буфер (517 Байт) ===
FAT Buffer is only allocated if the constant: cSepFATHandle = 1
+
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)
|buffer for FAT sector
+
|Буфер FAT раздела '''«buffer for FAT sector»'''
 
|}
 
|}
  
=== File handling ===
+
=== Идентификация файловых потоков ===
Each file handle has a block of 538 Bytes in the variable abFileHandle which is a byte-array of size (538 * cFileHandles)
+
Каждый идентификатор фалового потока занимает 538 Байт в переменной '''abFileHandle''', являющейся массивом размера (538 * cFileHandles)
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Строка 235: Строка 183:
 
|FileNumber
 
|FileNumber
 
|Byte
 
|Byte
|File number for identification of the file in I/O
+
|Идентификатор файлового потока
 
 
operations to the opened file
 
 
|-
 
|-
 
|FileMode
 
|FileMode
 
|Byte
 
|Byte
|File open mode
+
|Режим открытия файла
 
|-
 
|-
 
|FileDirEntry
 
|FileDirEntry
Строка 253: Строка 199:
 
|FileFirstCluster
 
|FileFirstCluster
 
|Word
 
|Word
|First cluster
+
|Первый кластер
 
|-
 
|-
 
|FileSize
 
|FileSize
 
|Long
 
|Long
|file size in bytes
+
|Размер файла в Байтах
 
|-
 
|-
 
|FilePosition
 
|FilePosition
 
|Long
 
|Long
|file pointer (next read/write) 0-based
+
|Позиция курсора '''«(next read/write) 0-based»'''
 
|-
 
|-
 
|FileSectorNumber
 
|FileSectorNumber
 
|Long
 
|Long
|number of current loaded sector
+
|Номер текущего сектора
 
|-
 
|-
 
|FileBufferStatus
 
|FileBufferStatus
Строка 280: Строка 226:
 
|}
 
|}
  
== Error codes ==
+
== Коды ошибок ==
 +
Хранятся в переменной [[#Основная информация о системе (35 Байт)|gbDOSError]].
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
Строка 289: Строка 236:
 
|0
 
|0
 
|cpNoError
 
|cpNoError
|No Error
+
|Нет ошибки
 
|-
 
|-
 
|1
 
|1
 
|cpEndOfFile
 
|cpEndOfFile
|Attempt behind End of File
+
|Попытка чтения файла за пределами его конца
 
|-
 
|-
 
|17
 
|17
 
|cpNoMBR
 
|cpNoMBR
|Sector 0 on Card is not a Master Boot Record
+
|Сектор 0 на диске не является главной загрузочной записью (MBR)
 
|-
 
|-
 
|18
 
|18
 
|cpNoPBR
 
|cpNoPBR
|No Partition Sector
+
|Таблица секторов(Partition Sector) недоступна
 
|-
 
|-
 
|19
 
|19
 
|cpFileSystemNotSupported
 
|cpFileSystemNotSupported
|Only FAT16 File system is supported
+
|Неподдерживаемая файловая система, поддерживается только FAT16 и FAT32
 
|-
 
|-
 
|20
 
|20
 
|cpSectorSizeNotSupported
 
|cpSectorSizeNotSupported
|Only sector size of 512 Bytes is supported
+
|Неподдерживаемый размер сектора, поддерживаются сектора 512 Байт.
 
|-
 
|-
 
|21
 
|21
 
|cpSectorsPerClusterNotSupported
 
|cpSectorsPerClusterNotSupported
|Only 1, 2, 4, 8, 16, 32, 64 Sectors per Cluster is supported. These are values of normal formatted partitions. Exotic sizes, |which are not power of 2 are not supported
+
|Подддерживаются только 1, 2, 4, 8, 16, 32, 64 секторов в кластере. Это нормальные значения для отформатированного раздела. Экзотические размеры кластера, не делящиеся нацело на 2, не поддерживаются
 
|-
 
|-
 
|22
 
|22
 
|cpCountOfClustersNotSupported
 
|cpCountOfClustersNotSupported
|Count of FAT (valid is 1 or 2) not supported (will be renamed with one of next release)
+
|Данное количество разделов не поддерживается (поддерживается только 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
+
|Следующий кластер файла недоступен '''«Error in file cluster chain»'''
 
|-
 
|-
 
|34
 
|34
 
|cpNoFreeCluster
 
|cpNoFreeCluster
|No free cluster to allocate (Disk full)
+
|Нет свободных кластеров'''«(cluster)»''', диск заполнен
 
|-
 
|-
 
|35
 
|35
 
|cpClusterError
 
|cpClusterError
|Error in file cluster chain
+
|Ошибка чтения кластера файла '''«Error in file cluster chain»'''
 
|-
 
|-
 
|49
 
|49
 
|cpNoFreeDirEntry
 
|cpNoFreeDirEntry
|Directory full
+
|Директория заполнена '''«Directory full»'''
 
|-
 
|-
 
|50
 
|50
 
|cpFileExist
 
|cpFileExist
|
+
|Такой файл уже существует (неверное имя при переименовании)'''«(сам придумал)»'''
 
|-
 
|-
 
|51
 
|51
 
|cpFileDeleteNotAllowed
 
|cpFileDeleteNotAllowed
|Deleting of file not allowed (System, Hidden, Read-Only)
+
|Удаление файла запрещено его атрибутами (файл скрытый, системный или только для чтения)
 
|-
 
|-
 
|52
 
|52
 
|cpSubDirectoryNotEmpty
 
|cpSubDirectoryNotEmpty
|Removing of sub-directory not possible, because it is not empty
+
|Невозможно удалить каталог, он не пуст.
 
|-
 
|-
 
|53
 
|53
Строка 353: Строка 301:
 
|54
 
|54
 
|cpNoASubDirectory
 
|cpNoASubDirectory
|Passed name is a file name and not a directory name
+
|Имя не соотвествует каталогу, это файл.
 
|-
 
|-
 
|65
 
|65
 
|cpNoFreeFileNumber
 
|cpNoFreeFileNumber
|No free file number available, only theoretical error, if 255 file handles in use
+
|Нет свободных идентификаторов файлового потока (возможно открыть не более 255 файлов одновременно)
 
|-
 
|-
 
|66
 
|66
 
|cpFileNotFound
 
|cpFileNotFound
|File not found
+
|Файл не найден
 
|-
 
|-
 
|67
 
|67
 
|cpFileNumberNotFound
 
|cpFileNumberNotFound
|No file handle with such file number
+
|Такой идентификатор файлового потока не существует
 
|-
 
|-
 
|68
 
|68
 
|cpFileOpenNoHandle
 
|cpFileOpenNoHandle
|All file handles occupied
+
|Все идентификаторы файлового потока неверны '''«All file handles occupied»'''
 
|-
 
|-
 
|69
 
|69
 
|cpFileOpenHandleInUse
 
|cpFileOpenHandleInUse
|File handle number in use, can't create a new file handle with same file number
+
|Такой идентификатор файлового потока уже используется, невозможно создать новый поток с таким идентификатором
 
|-
 
|-
 
|70
 
|70
|cpFileOpenShareConflict
+
|cpFileOpenShareConflict
|Tried to open a file in read and write modus in two file handles
+
|Невозможно получить доступ к файлу(напр, одновременне открытие для записи и чтения)
 
|-
 
|-
 
|71
 
|71
 
|cpFileInUse
 
|cpFileInUse
|Can't delete file, which is in use
+
|Невозможно удалить файл, использующийся в данный момент
 
|-
 
|-
 
|72
 
|72
 
|cpFileReadOnly
 
|cpFileReadOnly
|Can't open a read only file for writing
+
|Невозможно произвести запись, файл только для чтения.
 
|-
 
|-
 
|73
 
|73
 
|cpFileNoWildCardAllowed
 
|cpFileNoWildCardAllowed
|No wildcard allowed in this function
+
|Специальные символы(WildCards) не разрешены при использовании данной функции
 
|-
 
|-
 
|74
 
|74
 
|CpFileNumberInvalid
 
|CpFileNumberInvalid
|File number 0 is not allowed
+
|Файловый идентификатор не поддерживается (напр, '''0''')
 
|-
 
|-
 
|97
 
|97
 
|cpFilePositionError
 
|cpFilePositionError
|
+
|Позиция курсора неверна '''(«сам придумал»)'''
 
|-
 
|-
 
|98
 
|98
 
|cpFileAccessError
 
|cpFileAccessError
|function not allowed in this file open mode
+
|Функция не может выполнятся в текущем [[Окружение AVR-DOS#Использование команд ввода-вывода в различных режимах|режиме открытия]] файла
 
|-
 
|-
 
|99
 
|99
 
|cpInvalidFilePosition
 
|cpInvalidFilePosition
|new file position pointe is invalid (minus or 0)
+
|Новая позиция курсора неверна (отрицательное значение или '''0''') '''«в описании идентификаторов сказано что нумерация с нуля. кто же прав?»'''
 
|-
 
|-
 
|100
 
|100
 
|cpFileSizeToGreat
 
|cpFileSizeToGreat
|File size to great for function BLoad
+
|Размер файла слишком большой для использования функции BLoad
 
|}
 
|}
  
Строка 489: Строка 437:
 
!Binary
 
!Binary
 
|-
 
|-
|Attr
+
|[[Дополнительные команды 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">Position pointer is always at End of File</ref>
+
|<ref name="EOF">Позиция курсора в конце файла</ref>
|<ref name="EOF">Position pointer is always at End of File</ref>
+
|<ref name="EOF">Позиция курсора в конце файла</ref>
 
|<nowiki>+</nowiki>
 
|<nowiki>+</nowiki>
 
|-
 
|-
|SEEK (Get Position)
+
|[[Дополнительные команды AVR-DOS#Seek|Seek (Get Position)]]
 
|<nowiki>+</nowiki>
 
|<nowiki>+</nowiki>
|<nowiki>+</nowiki><ref name="EOF">Position pointer is always at End of File</ref>
+
|<nowiki>+</nowiki><ref name="EOF">Позиция курсора в конце файла</ref>
|<nowiki>+</nowiki><ref name="EOF">Position pointer is always at End of File</ref>
+
|<nowiki>+</nowiki><ref name="EOF">Позиция курсора в конце файла</ref>
 
|<nowiki>+</nowiki>
 
|<nowiki>+</nowiki>
 
|-
 
|-
|SEEK (Set Position)
+
|[[Дополнительные команды 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 />
  
Supported statements and functions:  
+
Поддерживаемые выражения и функции:
 
 
 
<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 - использовать буфер
0 - не использовать буфер

cFATDirSaveAtEnd Частота записи информации раздела и директории во время изменения файла. Опция может увеличить(1) или уменьшить (0) скорость записи секотров через уменьшение/увеличение количества перезаписи информации о разделе и директории.

Не забывайте вызывать процедуру FLUSH чтобы сбросить изменения на диск!
0 - обновление информации о директории, разделе и дисковой копии файла при каждом его изменении.
1 - обновление информации о директории и разделе только при вызове процедур CLOSE и FLUSH.

cTextQuotationMarks Сопутствующие строки в кавычках при вызове команды WRITE (напр, Write "Text"). «или при записи в файл,т.е. предсталвение в файле??»

0 - Запрещается использование сопутствующих строк
1 - Разрешается использование сопутствующих строк

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
1 = Second FAT is updated if exist [default]

cVariableSeparator Символ для разделения ASCII данных в файле или RS-232 интерфейсе, записываемых (читаемых) командой WRITE(INPUT). Обычно используется запятая (,), но она может быть заменена на другие символы, например символ табуляции(ASCII, код 9), используемый в файлах EXCEL.

44 - запятая [по умолчанию], файл выглядит как "abc",10
9 - табуляция, файл выглядит как "abc" 10

Использование памяти файловой системой

Основная информация о системе (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 + +
Print + + +
Input + +
Write + + +
  1. 1 2 3 4 Позиция курсора в конце файла

Поддерживаемые выражения и функции: 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