Дополнительные команды AVR-DOS — различия между версиями

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск
(Kill)
(Отмена правки 6155 участника MiBBiM (обсуждение))
Строка 1: Строка 1:
 
[[Категория:AVR-DOS]]
 
[[Категория:AVR-DOS]]
'''Список команд AVR-DOS''' — список функций библиотеки  
+
'''Список команд AVR-DOS''' — список функций библиотеки [[AVR-DOS]].
 
 
[[AVR-DOS]].
 
  
 
== Диск/Директория ==
 
== Диск/Директория ==
Строка 22: Строка 20:
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">Dim bErrorCode as Byte
+
<pre>Dim bErrorCode as Byte
 
bErrorCode = InitFileSystem(1)
 
bErrorCode = InitFileSystem(1)
 
If bErrorCode > 0 then
 
If bErrorCode > 0 then
Строка 29: Строка 27:
 
Print "Filesystem successfully initialized"
 
Print "Filesystem successfully initialized"
 
End If
 
End If
</source>
+
</pre>
  
 
=== DiskSize ===
 
=== DiskSize ===
Строка 43: Строка 41:
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">Dim Gbtemp1 As Byte ' scratch byte
+
<pre>Dim Gbtemp1 As Byte ' scratch byte
Gbtemp1 = Initfilesystem(1) ' we must init the  
+
Gbtemp1 = Initfilesystem(1) ' we must init the filesystem once
 
 
filesystem once
 
 
If Gbtemp1 > 0 Then
 
If Gbtemp1 > 0 Then
 
Print #1 , "Error " ; Gbtemp1
 
Print #1 , "Error " ; Gbtemp1
 
Else
 
Else
 
Print #1 , " OK"
 
Print #1 , " OK"
Print "Disksize : " ; Disksize() ' show disk size in  
+
Print "Disksize : " ; Disksize() ' show disk size in Kbytes
 
 
Kbytes
 
 
Print "Disk free: " ; Diskfree() ' show free space too
 
Print "Disk free: " ; Diskfree() ' show free space too
 
End If
 
End If
</source>
+
</pre>
  
 
=== DiskFree ===
 
=== DiskFree ===
Строка 70: Строка 64:
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">Dim Gbtemp1 As Byte ' scratch byte
+
<pre>Dim Gbtemp1 As Byte ' scratch byte
Gbtemp1 = Initfilesystem(1) ' we must init the  
+
Gbtemp1 = Initfilesystem(1) ' we must init the filesystem once
 
 
filesystem once
 
 
If Gbtemp1 > 0 Then
 
If Gbtemp1 > 0 Then
 
Print #1 , "Error " ; Gbtemp1
 
Print #1 , "Error " ; Gbtemp1
 
Else
 
Else
 
Print #1 , " OK"
 
Print #1 , " OK"
Print "Disksize : " ; Disksize() ' show disk size in  
+
Print "Disksize : " ; Disksize() ' show disk size in Kbytes
 
 
Kbytes
 
 
Print "Disk free: " ; Diskfree() ' show free space too
 
Print "Disk free: " ; Diskfree() ' show free space too
 
End If
 
End If
</source>
+
</pre>
  
 
=== Kill ===
 
=== Kill ===
Строка 97: Строка 87:
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">'We can use the KILL statement to delete a file.
+
<pre>'We can use the KILL statement to delete a file.
 
'A file mask is not supported
 
'A file mask is not supported
 
Print "Kill (delete) file demo"
 
Print "Kill (delete) file demo"
 
Kill "test.txt"
 
Kill "test.txt"
</source>
+
</pre>
  
 
=== Dir ===
 
=== Dir ===
 
Возвращает имя файла, удовлетворяющее маске.
 
Возвращает имя файла, удовлетворяющее маске.
  
Первый вызов функции содержит маску. Все последующие  
+
Первый вызов функции содержит маску. Все последующие вызовы совершаются без маски. Фактически, когда вы хотите получить имя следующего файла в данной директории, удовлетворяющее маске, вы должны вызывать вариант функции без параметров после первого вызова.
 
 
вызовы совершаются без маски. Фактически, когда вы  
 
 
 
хотите получить имя следующего файла в данной  
 
 
 
директории, удовлетворяющее маске, вы должны вызывать  
 
 
 
вариант функции без параметров после первого вызова.
 
  
 
<code>sFile = Dir(mask)</code>
 
<code>sFile = Dir(mask)</code>
Строка 122: Строка 104:
 
{| class="wikitable"
 
{| class="wikitable"
 
| SFile(String)
 
| SFile(String)
| Имя файла. Строка пуста, если больше нет файлов,  
+
| Имя файла. Строка пуста, если больше нет файлов, удовлетворяющих маске
 
 
удовлетворяющих маске
 
 
|-
 
|-
 
| Mask(String)
 
| Mask(String)
| Файловая маска, удовлетворяющая требованиям обычного  
+
| Файловая маска, удовлетворяющая требованиям обычного DOS, напр. *.TXT. Маска *.* удовлетворяет всем файлам
 
 
DOS, напр. *.TXT. Маска *.* удовлетворяет всем файлам
 
 
|}
 
|}
  
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">'Lets have a look at the file we created
+
<pre>'Lets have a look at the file we created
 
Print "Dir function demo"
 
Print "Dir function demo"
 
S = Dir( "*.*")
 
S = Dir( "*.*")
'The first call to the DIR() function must contain a  
+
'The first call to the DIR() function must contain a file mask
 
 
file mask
 
 
' The * means everything.
 
' The * means everything.
 
'
 
'
 
While Len(s) > 0 ' if there was a file found
 
While Len(s) > 0 ' if there was a file found
Print S ; " " ; Filedate() ; " " ; Filetime() ; " " ;  
+
Print S ; " " ; Filedate() ; " " ; Filetime() ; " " ; Filelen()
 
+
' print file , the date the fime was created/changed , the time and the size of the file
Filelen()
 
' print file , the date the fime was created/changed ,  
 
 
 
the time and the size of the file
 
 
S = Dir() ' get next
 
S = Dir() ' get next
 
Wend
 
Wend
</source>
+
</pre>
  
 
=== FileLen ===
 
=== FileLen ===
Строка 165: Строка 137:
 
|-
 
|-
 
| File(String)
 
| File(String)
| Имя файла в текущей директории. Если не указано,  
+
| Имя файла в текущей директории. Если не указано, параметром считается последний файл, выбранный с помощью DIR()
 
 
параметром считается последний файл, выбранный с помощью  
 
 
 
DIR()
 
 
|}
 
|}
  
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">Print "File demo"
+
<pre>Print "File demo"
 
Print Filelen( "josef.img") ; " length" ' length of file
 
Print Filelen( "josef.img") ; " length" ' length of file
Print Filetime( "josef.img") ; " time" ' time file was  
+
Print Filetime( "josef.img") ; " time" ' time file was changed
 
 
changed
 
 
Print Filedate( "josef.img") ; " date" ' file date
 
Print Filedate( "josef.img") ; " date" ' file date
</source>
+
</pre>
  
 
=== FileDate ===
 
=== FileDate ===
Строка 194: Строка 160:
 
|-
 
|-
 
| File(String)
 
| File(String)
| Имя файла в текущей директории. Если не указано,  
+
| Имя файла в текущей директории. Если не указано, параметром считается последний файл, выбранный с помощью DIR()
 
 
параметром считается последний файл, выбранный с помощью  
 
 
 
DIR()
 
 
|}
 
|}
  
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">Print "File demo"
+
<pre>Print "File demo"
 
Print Filelen( "josef.img") ; " length" ' length of file
 
Print Filelen( "josef.img") ; " length" ' length of file
Print Filetime( "josef.img") ; " time" ' time file was  
+
Print Filetime( "josef.img") ; " time" ' time file was changed
 
 
changed
 
 
Print Filedate( "josef.img") ; " date" ' file date
 
Print Filedate( "josef.img") ; " date" ' file date
</source>
+
</pre>
  
 
=== FileTime ===
 
=== FileTime ===
Строка 223: Строка 183:
 
|-
 
|-
 
| File(String)
 
| File(String)
| Имя файла в текущей директории. Если не указано,  
+
| Имя файла в текущей директории. Если не указано, параметром считается последний файл, выбранный с помощью DIR()
 
 
параметром считается последний файл, выбранный с помощью  
 
 
 
DIR()
 
 
|}
 
|}
  
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">Print "File demo"
+
<pre>Print "File demo"
 
Print Filelen( "josef.img") ; " length" ' length of file
 
Print Filelen( "josef.img") ; " length" ' length of file
Print Filetime( "josef.img") ; " time" ' time file was  
+
Print Filetime( "josef.img") ; " time" ' time file was changed
 
 
changed
 
 
Print Filedate( "josef.img") ; " date" ' file date
 
Print Filedate( "josef.img") ; " date" ' file date
</source>
+
</pre>
  
 
=== FileDateTime ===
 
=== FileDateTime ===
Строка 252: Строка 206:
 
|-
 
|-
 
| File(String)
 
| File(String)
| When the target variable is a string, it must be  
+
| When the target variable is a string, it must be dimensioned with a length of at least 17 bytes.
 
 
dimensioned with a length of at least 17 bytes.
 
 
|-
 
|-
 
| File(Byte array)
 
| File(Byte array)
| When the target variable is a byte array, the array  
+
| When the target variable is a byte array, the array size must be at least 6 bytes.
 
 
size must be at least 6 bytes.
 
 
|-
 
|-
 
| File(Numeric)
 
| File(Numeric)
| When you use a numeric variable, the internal file  
+
| When you use a numeric variable, the internal file date and time format will be used.
 
 
date and time format will be used.
 
 
|}
 
|}
  
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">' Read and print Directory and show Filename, Date,  
+
<pre>' Read and print Directory and show Filename, Date, Time, Size
 
+
' for all files matching pStr1 and create/update younger than pDays
Time, Size
 
' for all files matching pStr1 and create/update younger  
 
 
 
than pDays
 
 
Sub Directorylist(pstr1 As String , Byval Pdays As Word)
 
Sub Directorylist(pstr1 As String , Byval Pdays As Word)
Local lFileName as String * 12 ' hold file name for  
+
Local lFileName as String * 12 ' hold file name for print
 
+
Local lwCounter as Word , lFileSizeSum as Long ' for summary
print
 
Local lwCounter as Word , lFileSizeSum as Long ' for  
 
 
 
summary
 
 
Local lwNow as Word , lwDays as Word
 
Local lwNow as Word , lwDays as Word
Local lSec as Byte , lMin as Byte , lHour as byte , lDay  
+
Local lSec as Byte , lMin as Byte , lHour as byte , lDay as byte , lMonth as byte , lYear as byte
 
+
print "Listing of all Files matching " ; pStr1 ; " and create/last update date within " ; pdays ; " days"
as byte , lMonth as byte , lYear as byte
 
print "Listing of all Files matching " ; pStr1 ; " and  
 
 
 
create/last update date within " ; pdays ; " days"
 
 
lwNow = SysDay()
 
lwNow = SysDay()
 
lwCounter = 0 : lFileSizeSum = 0
 
lwCounter = 0 : lFileSizeSum = 0
Строка 294: Строка 230:
 
While lFileName <> ""
 
While lFileName <> ""
 
lsec = FileDateTime()
 
lsec = FileDateTime()
lwDays = lwNow - SysDay(lDay) ' Days between Now and  
+
lwDays = lwNow - SysDay(lDay) ' Days between Now and last File Update; uses lDay, lMonth, lYear
 
+
if lwDays <= pDays then ' days smaller than desired with parameter
last File Update; uses lDay, lMonth, lYear
+
print lFileName ; FileDate() ; " " ; FileTime() ; " " ; filelen()
if lwDays <= pDays then ' days smaller than desired with  
 
 
 
parameter
 
print lFileName ; FileDate() ; " " ; FileTime() ; " " ;  
 
 
 
filelen()
 
 
incr lwCounter : lFileSizeSum = FileLen() + lFileSizeSum
 
incr lwCounter : lFileSizeSum = FileLen() + lFileSizeSum
 
end if
 
end if
 
lFileName = Dir()
 
lFileName = Dir()
 
WEnd
 
WEnd
print lwCounter ; " File(s) found with " ; lFileSizeSum  
+
print lwCounter ; " File(s) found with " ; lFileSizeSum ; " Byte(s)"
 
 
; " Byte(s)"
 
 
End Sub
 
End Sub
</source>
+
</pre>
  
 
=== GetAttr ===
 
=== GetAttr ===
Строка 322: Строка 250:
 
{| class="wikitable"
 
{| class="wikitable"
 
| bAttr(Byte)
 
| bAttr(Byte)
| Атрибуты файла, совместимые с DOS-форматом. Байт  
+
| Атрибуты файла, совместимые с DOS-форматом. Байт расшифровывается как '''00ADVSHR''', где биты 5-0:
 
 
расшифровывается как '''00ADVSHR''', где биты 5-0:
 
 
'''A''' - Архивный<br/>
 
'''A''' - Архивный<br/>
 
'''D''' - Директория<br/>
 
'''D''' - Директория<br/>
Строка 333: Строка 259:
 
|-
 
|-
 
| File(String)
 
| File(String)
| Имя файла в текущей директории. Если не указано,  
+
| Имя файла в текущей директории. Если не указано, параметром считается последний файл, выбранный с помощью DIR()
 
 
параметром считается последний файл, выбранный с помощью  
 
 
 
DIR()
 
 
|}
 
|}
  
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">Print "File demo"
+
<pre>Print "File demo"
 
Print Filelen( "josef.img") ; " length" ' length of file
 
Print Filelen( "josef.img") ; " length" ' length of file
Print Filetime( "josef.img") ; " time" ' time file was  
+
Print Filetime( "josef.img") ; " time" ' time file was changed
 
 
changed
 
 
Print Filedate( "josef.img") ; " date" ' file date
 
Print Filedate( "josef.img") ; " date" ' file date
Print Bin(GetAttr(“Josef.img”)) ; “Attributes” ‘ DOS  
+
Print Bin(GetAttr(“Josef.img”)) ; “Attributes” ‘ DOS Attributes
 
+
</pre>
Attributes
 
</source>
 
  
 
=== Name ===
 
=== Name ===
Переименовывает файл в текущей директории. Файл с новым  
+
Переименовывает файл в текущей директории. Файл с новым именем не должен существовать в текущей директории, иначе команда вернет ошибку. Код ошибки можно посмотреть в глобальной переменной gbDOSError<ref name="OkrDOS">Подробнее [[Окружение AVR-DOS]]</ref>.
 
 
именем не должен существовать в текущей директории,  
 
 
 
иначе команда вернет ошибку. Код ошибки можно посмотреть  
 
 
 
в глобальной переменной gbDOSError<ref  
 
 
 
name="OkrDOS">Подробнее [[Окружение AVR-DOS]]</ref>.
 
  
 
<code>Name <strOldFilename> As <strNewFileName></code>
 
<code>Name <strOldFilename> As <strNewFileName></code>
Строка 376: Строка 286:
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">Dim strOldFileName as String * 12
+
<pre>Dim strOldFileName as String * 12
 
Dim strNewFileName as String * 12
 
Dim strNewFileName as String * 12
  
Строка 382: Строка 292:
 
strNewFileName = "Data.bak"
 
strNewFileName = "Data.bak"
 
Name strOldFilename As strNewFileName
 
Name strOldFilename As strNewFileName
</source>
+
</pre>
  
 
=== ChDir ===
 
=== ChDir ===
 
Изменяет текущую директорию.<br />
 
Изменяет текущую директорию.<br />
'''Функции Kill, Dir, ChDir, MkDir, RmDir, Name,  
+
'''Функции Kill, Dir, ChDir, MkDir, RmDir, Name, FileLen, FileDateTime, FileDate, FileTime, GetAttr, Open, BLoad и BSave работают только в текущей директории. Обращаться к файлу с помощью составного пути запрещается!'''
 
 
FileLen, FileDateTime, FileDate, FileTime, GetAttr,  
 
 
 
Open, BLoad и BSave работают только в текущей  
 
 
 
директории. Обращаться к файлу с помощью составного пути  
 
 
 
запрещается!'''
 
  
 
<code>ChDIR (strDirectoryName)</code>
 
<code>ChDIR (strDirectoryName)</code>
Строка 400: Строка 302:
 
{| class="wikitable"
 
{| class="wikitable"
 
| strDirectoryName(String)
 
| strDirectoryName(String)
| Путь к новой директории, длина не более 8 символов.  
+
| Путь к новой директории, длина не более 8 символов. Допускаются следующие спецсимволы:<br />
 
 
Допускаются следующие спецсимволы:<br />
 
 
"." - на директорию выше<br />
 
"." - на директорию выше<br />
 
"\" - в корень диска
 
"\" - в корень диска
Строка 409: Строка 309:
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">Dim strDirectory as String * 12
+
<pre>Dim strDirectory as String * 12
  
 
ChDir "SubDir"
 
ChDir "SubDir"
Строка 421: Строка 321:
 
strDirectory = "\"
 
strDirectory = "\"
 
ChDir strDirectory
 
ChDir strDirectory
</source>
+
</pre>
  
 
=== MkDir ===
 
=== MkDir ===
Строка 435: Строка 335:
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">Dim strDirectory as String * 12
+
<pre>Dim strDirectory as String * 12
 
MkDir "NewDir"
 
MkDir "NewDir"
 
' or
 
' or
 
strDirectory = "NewDir"
 
strDirectory = "NewDir"
 
MkDir strDirectory
 
MkDir strDirectory
</source>
+
</pre>
  
 
=== RmDir ===
 
=== RmDir ===
Строка 454: Строка 354:
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">Dim strDirectory as String * 12
+
<pre>Dim strDirectory as String * 12
 
MkDir "NewDir"
 
MkDir "NewDir"
 
' or
 
' or
 
strDirectory = "NewDir"
 
strDirectory = "NewDir"
 
MkDir strDirectory
 
MkDir strDirectory
</source>
+
</pre>
  
 
== Файлы ==
 
== Файлы ==
 
=== FreeFile ===
 
=== FreeFile ===
Возвращает свободный файловый номер(filenumber). Функция  
+
Возвращает свободный файловый номер(filenumber). Функция обеспечивает совместимость с QB.
 
 
обеспечивает совместимость с QB.
 
  
 
<code>bFileNumber = FreeFile()</code>
 
<code>bFileNumber = FreeFile()</code>
Строка 471: Строка 369:
 
{| class="wikitable"
 
{| class="wikitable"
 
| bFileNumber(Byte)
 
| bFileNumber(Byte)
| Свободный файловый номер, который может использоваться  
+
| Свободный файловый номер, который может использоваться для открытия новых файлов. В отличие от QB, этот файловый номер начинается с 128  и заканчивается 255. Используйте числа 1..127 для пользовательских номеров, чтобы избежать конфликтов номеров при использованиии функции.
 
 
для открытия новых файлов. В отличие от QB, этот  
 
 
 
файловый номер начинается с 128  и заканчивается 255.  
 
 
 
Используйте числа 1..127 для пользовательских номеров,  
 
 
 
чтобы избежать конфликтов номеров при использованиии  
 
 
 
функции.
 
 
|}
 
|}
  
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">Ff = Freefile() ' get file handle
+
<pre>Ff = Freefile() ' get file handle
Open "test.txt" For Input As #ff ' we can use a constant  
+
Open "test.txt" For Input As #ff ' we can use a constant for the file too
 
 
for the file too
 
 
Print Lof(#ff) ; " length of file"
 
Print Lof(#ff) ; " length of file"
Print Fileattr(#ff) ; " file mode" ' should be 1 for  
+
Print Fileattr(#ff) ; " file mode" ' should be 1 for input
 
 
input
 
 
Do
 
Do
 
Line Input #ff , S ' read a line
 
Line Input #ff , S ' read a line
Строка 499: Строка 383:
 
Print S ' print on terminal emulator
 
Print S ' print on terminal emulator
 
Loop Until Eof(ff) <> 0
 
Loop Until Eof(ff) <> 0
'The EOF() function returns a non-zero number when the  
+
'The EOF() function returns a non-zero number when the end of the file is reached
 
 
end of the file is reached
 
 
'This way we know that there is no more data we can read
 
'This way we know that there is no more data we can read
 
Close #ff
 
Close #ff
</source>
+
</pre>
  
 
=== Open ===
 
=== Open ===
Строка 515: Строка 397:
 
{| class="wikitable"
 
{| class="wikitable"
 
| Device
 
| Device
| The default device is COM1 and you don't need to open  
+
| The default device is COM1 and you don't need to open a channel to use INPUT/OUTPUT on this device.
 
+
With the implementation of the software UART, the compiler must know to which pin/device you will send/receive the data.
a channel to use INPUT/OUTPUT on this device.
+
So that is why the OPEN statement must be used. It tells the compiler about the pin you use for the serial input or output and the baud rate you want to use.
With the implementation of the software UART, the  
+
COMB.0:9600,8,N,2 will use PORT B.0 at 9600 baud with 2 stopbits.
 
 
compiler must know to which pin/device you will  
 
 
 
send/receive the data.
 
So that is why the OPEN statement must be used. It tells  
 
 
 
the compiler about the pin you use for the serial input  
 
 
 
or output and the baud rate you want to use.
 
COMB.0:9600,8,N,2 will use PORT B.0 at 9600 baud with 2  
 
 
 
stopbits.
 
  
 
The format for COM1 and COM2 is : COM1: or COM2:
 
The format for COM1 and COM2 is : COM1: or COM2:
  
There is no speed/baud rate parameter since the default  
+
There is no speed/baud rate parameter since the default baud rate will be used that is specified with $BAUD or $BAUD1
 
 
baud rate will be used that is specified with $BAUD or  
 
 
 
$BAUD1
 
 
 
The format for the software UART is:
 
  
COMpin:speed,8,N,stopbits[,INVERTED]
+
The format for the software UART is: COMpin:speed,8,N,stopbits[,INVERTED]
 
Where pin is the name of the PORT-pin.
 
Where pin is the name of the PORT-pin.
 
Speed must be specified and stop bits can be 1 or 2.
 
Speed must be specified and stop bits can be 1 or 2.
Строка 548: Строка 412:
 
For parity N, O or E can be used.
 
For parity N, O or E can be used.
  
An optional parameter ,INVERTED can be specified to use  
+
An optional parameter ,INVERTED can be specified to use inverted RS-232.
 
+
Open "COMD.1:9600,8,N,1,INVERTED" For Output As #1 , will use pin PORTD.1 for output with 9600 baud, 1 stop bit and with inverted RS-232.
inverted RS-232.
 
Open "COMD.1:9600,8,N,1,INVERTED" For Output As #1 ,  
 
 
 
will use pin PORTD.1 for output with 9600 baud, 1 stop  
 
 
 
bit and with inverted RS-232.
 
 
 
For the AVR-DOS filesystem, Device can also be a string
 
  
or filename constant like  
+
For the AVR-DOS filesystem, Device can also be a string or filename constant like  
  
 
"readme.txt" or sFileName
 
"readme.txt" or sFileName
 
|-
 
|-
 
| Mode
 
| Mode
| You can use BINARY or RANDOM for COM1 and COM2, but  
+
| You can use BINARY or RANDOM for COM1 and COM2, but for the software UART pins, you must specify INPUT or OUTPUT
 
 
for the software UART pins, you must specify INPUT or  
 
 
 
OUTPUT
 
 
 
For the AVR-DOS filesystem, MODE may be INPUT, OUTPUT,
 
  
APPEND or BINARY
+
For the AVR-DOS filesystem, MODE may be INPUT, OUTPUT, APPEND or BINARY
 
|-
 
|-
 
| Channel
 
| Channel
| The number of the channel to open. Must be a positive  
+
| The number of the channel to open. Must be a positive constant >0
 
 
constant >0
 
 
 
For the AVR-DOS filesystem, the channel may be a
 
 
 
positive constant or a numeric variable. Note that the
 
 
 
AVD-DOS filesystem uses real filehandles. The software
 
  
UART does not use real file handles.
+
For the AVR-DOS filesystem, the channel may be a positive constant or a numeric variable. Note that the AVD-DOS filesystem uses real filehandles. The software UART does not use real file handles.
 
|}
 
|}
  
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">OPEN "com1:" for binary as #1
+
<pre>OPEN "com1:" for binary as #1
 
Call test
 
Call test
 
End
 
End
Строка 597: Строка 439:
 
End Sub
 
End Sub
 
Close #1
 
Close #1
</source>
+
</pre>
  
 
=== Close ===
 
=== Close ===
 
Освобождает открытое устройство.
 
Освобождает открытое устройство.
The statements that support the device are PRINT , INPUT  
+
The statements that support the device are PRINT , INPUT and INPUTHEX , INKEY, WAITKEY.
 
+
Every opened device must be closed using the CLOSE #channel statement. Of course, you must use the same channel number.
and INPUTHEX , INKEY, WAITKEY.
+
The best place for the CLOSE statement is at the end of your program.
Every opened device must be closed using the CLOSE  
+
The INPUT statement in combination with the software UART, will not echo characters back because there is no default associated pin for this.
 
+
For the AVR-DOS filesystem, you may place the CLOSE at any place in your program. This because the filesystem supports real file handles.  
#channel statement. Of course, you must use the same  
 
 
 
channel number.
 
The best place for the CLOSE statement is at the end of  
 
 
 
your program.
 
The INPUT statement in combination with the software  
 
 
 
UART, will not echo characters back because there is no  
 
 
 
default associated pin for this.
 
For the AVR-DOS filesystem, you may place the CLOSE at  
 
 
 
any place in your program. This because the filesystem  
 
 
 
supports real file handles.  
 
  
 
<code>OPEN "device" for MODE As #channel<br />
 
<code>OPEN "device" for MODE As #channel<br />
Строка 629: Строка 455:
 
{| class="wikitable"
 
{| class="wikitable"
 
| Device
 
| Device
| The default device is COM1 and you don't need to open  
+
| The default device is COM1 and you don't need to open a channel to use INPUT/OUTPUT on this device.
 
+
With the implementation of the software UART, the compiler must know to which pin/device you will send/receive the data.
a channel to use INPUT/OUTPUT on this device.
+
So that is why the OPEN statement must be used. It tells the compiler about the pin you use for the serial input or output and the baud rate you want to use.
With the implementation of the software UART, the  
+
COMB.0:9600,8,N,2 will use PORT B.0 at 9600 baud with 2 stop bits.
 
 
compiler must know to which pin/device you will  
 
 
 
send/receive the data.
 
So that is why the OPEN statement must be used. It tells  
 
 
 
the compiler about the pin you use for the serial input  
 
 
 
or output and the baud rate you want to use.
 
COMB.0:9600,8,N,2 will use PORT B.0 at 9600 baud with 2  
 
 
 
stop bits.
 
  
 
The format for COM1 is : COM1:
 
The format for COM1 is : COM1:
  
Some chips have 2 UARTS. You can use COM2: to open the  
+
Some chips have 2 UARTS. You can use COM2: to open the second HW UART.
 
 
second HW UART.
 
  
The format for the software UART is:  
+
The format for the software UART is: COMpin:speed,8,N,stop bits[,INVERTED]
 
 
COMpin:speed,8,N,stop bits[,INVERTED]
 
 
Where pin is the name of the PORT-pin.
 
Where pin is the name of the PORT-pin.
 
Speed must be specified and stop bits can be 1 or 2.
 
Speed must be specified and stop bits can be 1 or 2.
An optional parameter ,INVERTED can be specified to use  
+
An optional parameter ,INVERTED can be specified to use inverted RS-232.
 
+
Open "COMD.1:9600,8,N,1,INVERTED" For Output As #1 , will use pin PORTD.1 for output with 9600 baud, 1 stop bit and with inverted RS-232
inverted RS-232.
 
Open "COMD.1:9600,8,N,1,INVERTED" For Output As #1 ,  
 
 
 
will use pin PORTD.1 for output with 9600 baud, 1 stop  
 
 
 
bit and with inverted RS-232
 
 
|-
 
|-
 
|MODE
 
|MODE
|You can use BINARY or RANDOM for COM1 and COM2, but for  
+
|You can use BINARY or RANDOM for COM1 and COM2, but for the software UART pins, you must specify INPUT or OUTPUT
 
 
the software UART pins, you must specify INPUT or OUTPUT
 
 
|-
 
|-
 
|Channel
 
|Channel
|The number of the channel to open. Must be a positive  
+
|The number of the channel to open. Must be a positive constant >0
 
 
constant >0
 
 
|}
 
|}
  
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">$crystal = 10000000 'change to the value of the  
+
<pre>$crystal = 10000000 'change to the value of the XTAL you have installed
 
 
XTAL you have installed
 
  
 
Dim B As Byte
 
Dim B As Byte
Строка 688: Строка 486:
 
'Why would you want to do that?
 
'Why would you want to do that?
 
'Because chips that have an internal oscillator may not
 
'Because chips that have an internal oscillator may not
'run at the speed specified. This depends on the  
+
'run at the speed specified. This depends on the voltage, temp etc.
 
 
voltage, temp etc.
 
 
'You can either change $CRYSTAL or you can use
 
'You can either change $CRYSTAL or you can use
 
'BAUD #1,9610
 
'BAUD #1,9610
  
'In this example file we use the DT006 from  
+
'In this example file we use the DT006 from www.simmstick.com
 
 
www.simmstick.com
 
 
'This allows easy testing with the existing serial port
 
'This allows easy testing with the existing serial port
 
'The MAX232 is fitted for this example.
 
'The MAX232 is fitted for this example.
'Because we use the hardware UART pins we MAY NOT use  
+
'Because we use the hardware UART pins we MAY NOT use the hardware UART
 
+
'The hardware UART is used when you use PRINT, INPUT or other related statements
the hardware UART
 
'The hardware UART is used when you use PRINT, INPUT or  
 
 
 
other related statements
 
 
'We will use the software UART.
 
'We will use the software UART.
 
Waitms 100
 
Waitms 100
Строка 715: Строка 505:
 
'Now open a pin for input
 
'Now open a pin for input
 
Open "comd.0:19200,8,n,1" For Input As #2
 
Open "comd.0:19200,8,n,1" For Input As #2
'since there is no relation between the input and output  
+
'since there is no relation between the input and output pin
 
 
pin
 
 
'there is NO ECHO while keys are typed
 
'there is NO ECHO while keys are typed
 
Print #1 , "Number"
 
Print #1 , "Number"
Строка 727: Строка 515:
 
'now loop until ESC is pressed
 
'now loop until ESC is pressed
 
'With INKEY() we can check if there is data available
 
'With INKEY() we can check if there is data available
'To use it with the software UART you must provide the  
+
'To use it with the software UART you must provide the channel
 
 
channel
 
 
Do
 
Do
 
'store in byte
 
'store in byte
Строка 745: Строка 531:
  
 
'OPTIONAL you may use the HARDWARE UART
 
'OPTIONAL you may use the HARDWARE UART
'The software UART will not work on the hardware UART  
+
'The software UART will not work on the hardware UART pins
 
 
pins
 
 
'so you must choose other pins
 
'so you must choose other pins
 
'use normal hardware UART for printing
 
'use normal hardware UART for printing
Строка 753: Строка 537:
  
  
'When you dont want to use a level inverter such as the  
+
'When you dont want to use a level inverter such as the MAX-232
 
 
MAX-232
 
 
'You can specify ,INVERTED :
 
'You can specify ,INVERTED :
 
'Open "comd.0:300,8,n,1,inverted" For Input As #2
 
'Open "comd.0:300,8,n,1,inverted" For Input As #2
'Now the logic is inverted and there is no need for a  
+
'Now the logic is inverted and there is no need for a level converter
 
 
level converter
 
 
'But the distance of the wires must be shorter with this
 
'But the distance of the wires must be shorter with this
 
End
 
End
</source>
+
</pre>
  
 
=== Flush ===
 
=== Flush ===
Write current buffer of File to Card and updates  
+
Write current buffer of File to Card and updates Directory. This function writes all information of an open file, which is not saved yet to the Disk. Normally the Card is updated, if a file will be closed or changed to another sector. When no filenumber is specified, all open files will be flushed.
 
 
Directory. This function writes all information of an  
 
 
 
open file, which is not saved yet to the Disk. Normally  
 
 
 
the Card is updated, if a file will be closed or changed  
 
 
 
to another sector. When no filenumber is specified, all  
 
 
 
open files will be flushed.
 
  
 
<code>Flush #bFileNumber</code>
 
<code>Flush #bFileNumber</code>
Строка 784: Строка 554:
 
{| class="wikitable"
 
{| class="wikitable"
 
| BFileNumber(Byte)
 
| BFileNumber(Byte)
| Filenumber, which identifies an opened file such as #1  
+
| Filenumber, which identifies an opened file such as #1 or #ff
 
 
or #ff
 
 
|}
 
|}
  
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">$include "startup.inc"
+
<pre>$include "startup.inc"
  
 
'open the file in BINARY mode
 
'open the file in BINARY mode
Строка 799: Строка 567:
 
Put #2 , L ' write a long
 
Put #2 , L ' write a long
 
Ltemp = Loc(#2) + 1 ' get the position of the next byte
 
Ltemp = Loc(#2) + 1 ' get the position of the next byte
Print Ltemp ; " LOC" ' store the location of the file  
+
Print Ltemp ; " LOC" ' store the location of the file pointer
 
 
pointer
 
 
Print Lof(#2) ; " length of file"
 
Print Lof(#2) ; " length of file"
Print Fileattr(#2) ; " file mode" ' should be 32 for  
+
Print Fileattr(#2) ; " file mode" ' should be 32 for binary
 
 
binary
 
 
Put #2 , Sn ' write a single
 
Put #2 , Sn ' write a single
 
Put #2 , Stxt ' write a string
 
Put #2 , Stxt ' write a string
Строка 811: Строка 575:
 
Flush #2 ' flush to disk
 
Flush #2 ' flush to disk
 
Close #2
 
Close #2
</source>
+
</pre>
  
 
=== Print ===
 
=== Print ===
Send output to the RS-232 port. Writes a string to a  
+
Send output to the RS-232 port. Writes a string to a file. You can use a semicolon (;) to print more than one variable at one line.
 
+
When you end a line with a semicolon, no linefeed will be added. The PRINT routine can be used when you have a RS-232 interface on your uP. The RS-232 interface can be connected to a serial communication port of your computer. This way you can use a terminal emulator as an output device. You can also use the build in terminal emulator. The AVR-DOS filesystem also supports PRINT. But in that case, only strings can be written to disk.  
file. You can use a semicolon (;) to print more than one  
 
 
 
variable at one line.
 
When you end a line with a semicolon, no linefeed will  
 
 
 
be added. The PRINT routine can be used when you have a  
 
 
 
RS-232 interface on your uP. The RS-232 interface can be  
 
 
 
connected to a serial communication port of your  
 
 
 
computer. This way you can use a terminal emulator as an  
 
 
 
output device. You can also use the build in terminal  
 
 
 
emulator. The AVR-DOS filesystem also supports PRINT.  
 
 
 
But in that case, only strings can be written to disk.  
 
  
 
<code>PRINT var ; " constant" </code>
 
<code>PRINT var ; " constant" </code>
Строка 844: Строка 590:
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">Dim A As Byte , B1 As Byte , C As Integer , S As  
+
<pre>Dim A As Byte , B1 As Byte , C As Integer , S As String * 4
 
 
String * 4
 
 
A = 1
 
A = 1
 
Print "print variable a " ; A
 
Print "print variable a " ; A
Строка 864: Строка 608:
 
Rem Note That Integers Range From -32767 To 32768
 
Rem Note That Integers Range From -32767 To 32768
 
End
 
End
</source>
+
</pre>
  
 
=== Write ===
 
=== Write ===
Writes data to a sequential file. When you write a  
+
Writes data to a sequential file. When you write a variables value, you do not write the binary representatrion but the ASCII representation. When you look in a file it contains readable text. When you use PUT, to write binary info, the files are not readable or contain unreadable characters. Strings written are surrounded by string delimeters "". Multiple variables written are separated by a comma. Look to this example:
 
+
<pre>Dim S as String * 10 , W as Word
variables value, you do not write the binary  
 
 
 
representatrion but the ASCII representation. When you  
 
 
 
look in a file it contains readable text. When you use  
 
 
 
PUT, to write binary info, the files are not readable or  
 
 
 
contain unreadable characters. Strings written are  
 
 
 
surrounded by string delimeters "". Multiple variables  
 
 
 
written are separated by a comma. Look to this example:
 
<source lang="vb">Dim S as String * 10 , W as Word
 
 
S="hello" : W = 100
 
S="hello" : W = 100
 
OPEN "test.txt" For OUTPUT as #1
 
OPEN "test.txt" For OUTPUT as #1
 
WRITE #1, S , W
 
WRITE #1, S , W
CLOSE #1</source>
+
CLOSE #1</pre>
The file content will look like this : "hello",100. Use  
+
The file content will look like this : "hello",100. Use INPUT to read the values from value.  
 
 
INPUT to read the values from value.  
 
  
 
<code>Write #ch , data [,data1]</code>
 
<code>Write #ch , data [,data1]</code>
Строка 895: Строка 623:
 
{| class="wikitable"
 
{| class="wikitable"
 
| Ch(...)
 
| Ch(...)
| A channel number, which identifies an opened file.  
+
| A channel number, which identifies an opened file. This can be a hard coded constant or a variable
 
 
This can be a hard coded constant or a variable
 
 
|-
 
|-
 
| Data , data1
 
| Data , data1
Строка 905: Строка 631:
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">Dim S As string * 10 , W As Word ,L As Long
+
<pre>Dim S As string * 10 , W As Word ,L As Long
 
S = "write"
 
S = "write"
 
Open "write.dmo" For Output As #2
 
Open "write.dmo" For Output As #2
Строка 914: Строка 640:
 
Close #2
 
Close #2
 
Print S ; " " ; W ; " " ; L
 
Print S ; " " ; W ; " " ; L
</source>
+
</pre>
  
 
=== Input ===
 
=== Input ===
Read a Line from an opened File. Only valid for files  
+
Read a Line from an opened File. Only valid for files opened in mode INPUT. Line INPUT works only with strings. It is great for working on text files.  
 
 
opened in mode INPUT. Line INPUT works only with  
 
 
 
strings. It is great for working on text files.  
 
  
 
<code>LineInput #bFileNumber, sLineText</code>
 
<code>LineInput #bFileNumber, sLineText</code>
Строка 930: Строка 652:
 
|-
 
|-
 
| SlineText(String)
 
| SlineText(String)
| A string, which is assigned with the next line from  
+
| A string, which is assigned with the next line from the file
 
 
the file
 
 
|}
 
|}
  
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">'Ok we want to check if the file contains the  
+
<pre>'Ok we want to check if the file contains the written lines
 
 
written lines
 
 
Ff = Freefile() ' get file handle
 
Ff = Freefile() ' get file handle
Open "test.txt" For Input As #ff ' we can use a constant  
+
Open "test.txt" For Input As #ff ' we can use a constant for the file too
 
 
for the file too
 
 
Print Lof(#ff) ; " length of file"
 
Print Lof(#ff) ; " length of file"
Print Fileattr(#ff) ; " file mode" ' should be 1 for  
+
Print Fileattr(#ff) ; " file mode" ' should be 1 for input
 
 
input
 
 
Do
 
Do
 
Line Input #ff , S ' read a line
 
Line Input #ff , S ' read a line
Строка 953: Строка 667:
 
Print S ' print on terminal emulator
 
Print S ' print on terminal emulator
 
Loop Until Eof(ff) <> 0
 
Loop Until Eof(ff) <> 0
'The EOF() function returns a non-zero number when the  
+
'The EOF() function returns a non-zero number when the end of the file is reached
 
 
end of the file is reached
 
 
'This way we know that there is no more data we can read
 
'This way we know that there is no more data we can read
 
Close #ff
 
Close #ff
</source>
+
</pre>
  
 
=== Line Input ===
 
=== Line Input ===
Read a Line from an opened File. Only valid for files  
+
Read a Line from an opened File. Only valid for files opened in mode INPUT. Line INPUT works only with strings. It is great for working on text files.  
 
 
opened in mode INPUT. Line INPUT works only with  
 
 
 
strings. It is great for working on text files.  
 
  
 
<code>LineInput #bFileNumber, sLineText</code>
 
<code>LineInput #bFileNumber, sLineText</code>
Строка 974: Строка 682:
 
|-
 
|-
 
| SlineText(String)
 
| SlineText(String)
| A string, which is assigned with the next line from  
+
| A string, which is assigned with the next line from the file.
 
 
the file.
 
 
|}
 
|}
  
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">'Ok we want to check if the file contains the  
+
<pre>'Ok we want to check if the file contains the written lines
 
 
written lines
 
 
Ff = Freefile() ' get file handle
 
Ff = Freefile() ' get file handle
Open "test.txt" For Input As #ff ' we can use a constant  
+
Open "test.txt" For Input As #ff ' we can use a constant for the file too
 
 
for the file too
 
 
Print Lof(#ff) ; " length of file"
 
Print Lof(#ff) ; " length of file"
Print Fileattr(#ff) ; " file mode" ' should be 1 for  
+
Print Fileattr(#ff) ; " file mode" ' should be 1 for input
 
 
input
 
 
Do
 
Do
 
Line Input #ff , S ' read a line
 
Line Input #ff , S ' read a line
Строка 997: Строка 697:
 
Print S ' print on terminal emulator
 
Print S ' print on terminal emulator
 
Loop Until Eof(ff) <> 0
 
Loop Until Eof(ff) <> 0
'The EOF() function returns a non-zero number when the  
+
'The EOF() function returns a non-zero number when the end of the file is reached
 
 
end of the file is reached
 
 
'This way we know that there is no more data we can read
 
'This way we know that there is no more data we can read
 
Close #ff
 
Close #ff
</source>
+
</pre>
  
 
=== Get ===
 
=== Get ===
Reads a byte from the hardware or software UART. Reads  
+
Reads a byte from the hardware or software UART. Reads data from a file opened in BINARY mode.  
 
 
data from a file opened in BINARY mode.
 
 
 
GET in combination with the software/hardware UART is
 
 
 
provided for compatibility with BASCOM-8051. It reads
 
 
 
one byte.
 
GET in combination with the AVR-DOS filesystem is very
 
 
 
flexible and versatile. It works on files opened in
 
 
 
BINARY mode and you can reads all data types.
 
By default you only need to provide the variable name.  
 
  
When the variable is a byte, 1 byte wil be read. When  
+
GET in combination with the software/hardware UART is provided for compatibility with BASCOM-8051. It reads one byte.
 
+
GET in combination with the AVR-DOS filesystem is very flexible and versatile. It works on files opened in BINARY mode and you can reads all data types.
the variable is a word or integer, 2 bytes will be read.  
+
By default you only need to provide the variable name. When the variable is a byte, 1 byte wil be read. When the variable is a word or integer, 2 bytes will be read. When the variable is a long or single, 4 bytes will be read. When the variable is a string, the number of bytes that will be read is equal to the dimensioned size of the string. DIM S as string * 10 , would read 10 bytes.
 
+
Note that when you specify the length for a string, the maximum length is 255. The maximum length for a non-string array is 65535.
When the variable is a long or single, 4 bytes will be  
+
<pre>Example :  
 
+
GET #1 , var ,,2 ‘ read 2 bytes, start at current position
read. When the variable is a string, the number of bytes  
 
 
 
that will be read is equal to the dimensioned size of  
 
 
 
the string. DIM S as string * 10 , would read 10 bytes.
 
Note that when you specify the length for a string, the  
 
 
 
maximum length is 255. The maximum length for a  
 
 
 
non-string array is 65535.
 
<source lang="vb">Example :  
 
GET #1 , var ,,2 ‘ read 2 bytes, start at current  
 
 
 
position
 
 
GET #1, var , PS ‘ start at position stored in long PS
 
GET #1, var , PS ‘ start at position stored in long PS
GET #1, var , PS, 2 ‘ start at position stored in long  
+
GET #1, var , PS, 2 ‘ start at position stored in long PS and read 2 bytes</pre>
 
 
PS and read 2 bytes</source>
 
  
 
<code>GET #channel, var</code>
 
<code>GET #channel, var</code>
Строка 1052: Строка 720:
 
{| class="wikitable"
 
{| class="wikitable"
 
| #channel(...)
 
| #channel(...)
| A channel number, which identifies an opened file.  
+
| A channel number, which identifies an opened file. This can be a hard coded constant or a variable
 
 
This can be a hard coded constant or a variable
 
 
|-
 
|-
 
| Var(...)
 
| Var(...)
| The variable or variable array that will be assigned  
+
| The variable or variable array that will be assigned with the data from the file
 
 
with the data from the file
 
 
|-
 
|-
 
| Pos(...)
 
| Pos(...)
| This is an optional parameter that may be used to  
+
| This is an optional parameter that may be used to specify the postion where the reading must start from. This must be a long variable
 
 
specify the postion where the reading must start from.  
 
 
 
This must be a long variable
 
 
|-
 
|-
 
| Length(...)
 
| Length(...)
| This is an optional parameter that may be used to  
+
| This is an optional parameter that may be used to specify how many bytes must be read from the file.
 
 
specify how many bytes must be read from the file.
 
 
|}
 
|}
  
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">'for the binary file demo we need some variables of  
+
<pre>'for the binary file demo we need some variables of different types
 
+
Dim B As Byte , W As Word , L As Long , Sn As Single , Ltemp As Long
different types
 
Dim B As Byte , W As Word , L As Long , Sn As Single ,  
 
 
 
Ltemp As Long
 
 
Dim Stxt As String * 10
 
Dim Stxt As String * 10
B = 1 : W = 50000 : L = 12345678 : Sn = 123.45 : Stxt =  
+
B = 1 : W = 50000 : L = 12345678 : Sn = 123.45 : Stxt = "test"
 
 
"test"
 
  
 
'open the file in BINARY mode
 
'open the file in BINARY mode
Строка 1093: Строка 745:
 
Put #2 , L ' write a long
 
Put #2 , L ' write a long
 
Ltemp = Loc(#2) + 1 ' get the position of the next byte
 
Ltemp = Loc(#2) + 1 ' get the position of the next byte
Print Ltemp ; " LOC" ' store the location of the file  
+
Print Ltemp ; " LOC" ' store the location of the file pointer
 
 
pointer
 
 
Print Seek(#2) ; " = LOC+1"  
 
Print Seek(#2) ; " = LOC+1"  
  
 
Print Lof(#2) ; " length of file"
 
Print Lof(#2) ; " length of file"
Print Fileattr(#2) ; " file mode" ' should be 32 for  
+
Print Fileattr(#2) ; " file mode" ' should be 32 for binary
 
 
binary
 
 
Put #2 , Sn ' write a single
 
Put #2 , Sn ' write a single
 
Put #2 , Stxt ' write a string
 
Put #2 , Stxt ' write a string
Строка 1118: Строка 766:
 
Get #2 , Stxt ' get the string
 
Get #2 , Stxt ' get the string
 
Close #2
 
Close #2
</source>
+
</pre>
  
 
=== Put ===
 
=== Put ===
Writes a byte to the hardware or software UART. Writes  
+
Writes a byte to the hardware or software UART. Writes data to a file opened in BINARY mode.
 
 
data to a file opened in BINARY mode.
 
 
 
PUT in combination with the software/hardware UART is
 
 
 
provided for compatibility with BASCOM-8051. It writes
 
 
 
one byte
 
PUT in combination with the AVR-DOS filesystem is very
 
 
 
flexible and versatile. It works on files opened in
 
  
BINARY mode and you can write all data types.
+
PUT in combination with the software/hardware UART is provided for compatibility with BASCOM-8051. It writes one byte
By default you only need to provide the variable name.  
+
PUT in combination with the AVR-DOS filesystem is very flexible and versatile. It works on files opened in BINARY mode and you can write all data types.
 
+
By default you only need to provide the variable name. When the variable is a byte, 1 byte wil be written. When the variable is a word or integer, 2 bytes will be written. When the variable is a long or single, 4 bytes will be written. When the variable is a string, the number of bytes that will be written is equal to the dimensioned size of the string. DIM S as string * 10 , would write 10 bytes.
When the variable is a byte, 1 byte wil be written. When  
+
Note that when you specify the length for a string, the maximum length is 255. The maximum length for a non-string array is 65535.
 
 
the variable is a word or integer, 2 bytes will be  
 
 
 
written. When the variable is a long or single, 4 bytes  
 
 
 
will be written. When the variable is a string, the  
 
 
 
number of bytes that will be written is equal to the  
 
 
 
dimensioned size of the string. DIM S as string * 10 ,  
 
 
 
would write 10 bytes.
 
Note that when you specify the length for a string, the  
 
 
 
maximum length is 255. The maximum length for a  
 
 
 
non-string array is 65535.
 
 
Example:
 
Example:
<source lang="vb">PUT #1, var  
+
<pre>PUT #1, var  
 
PUT #1, var , , 2 ‘ write 2 bytes at default position
 
PUT #1, var , , 2 ‘ write 2 bytes at default position
PUT #1, var ,PS, 2 ‘ write 2 bytes at location storied  
+
PUT #1, var ,PS, 2 ‘ write 2 bytes at location storied in variable PS</pre>
 
 
in variable PS</source>
 
  
  
Строка 1170: Строка 788:
 
{| class="wikitable"
 
{| class="wikitable"
 
| #channel(...)
 
| #channel(...)
| A channel number, which identifies an opened file.  
+
| A channel number, which identifies an opened file. This can be a hard coded constant or a variable.
 
 
This can be a hard coded constant or a variable.
 
 
|-
 
|-
 
| Var(...)
 
| Var(...)
| The variable or variable array that will be written to  
+
| The variable or variable array that will be written to the file
 
 
the file
 
 
|-
 
|-
 
| Pos(...)
 
| Pos(...)
| This is an optional parameter that may be used to  
+
| This is an optional parameter that may be used to specify the postion where the data must be written to. This must be a long variable.
 
 
specify the postion where the data must be written to.  
 
 
 
This must be a long variable.
 
 
|-
 
|-
 
| Length(...)
 
| Length(...)
| This is an optional parameter that may be used to  
+
| This is an optional parameter that may be used to specify how many bytes must be written to the file.
 
 
specify how many bytes must be written to the file.
 
 
|}
 
|}
  
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">'for the binary file demo we need some variables of  
+
<pre>'for the binary file demo we need some variables of different types
 
+
Dim B As Byte , W As Word , L As Long , Sn As Single , Ltemp As Long
different types
 
Dim B As Byte , W As Word , L As Long , Sn As Single ,  
 
 
 
Ltemp As Long
 
 
Dim Stxt As String * 10
 
Dim Stxt As String * 10
B = 1 : W = 50000 : L = 12345678 : Sn = 123.45 : Stxt =  
+
B = 1 : W = 50000 : L = 12345678 : Sn = 123.45 : Stxt = "test"
 
 
"test"
 
  
 
'open the file in BINARY mode
 
'open the file in BINARY mode
Строка 1211: Строка 813:
 
Put #2 , L ' write a long
 
Put #2 , L ' write a long
 
Ltemp = Loc(#2) + 1 ' get the position of the next byte
 
Ltemp = Loc(#2) + 1 ' get the position of the next byte
Print Ltemp ; " LOC" ' store the location of the file  
+
Print Ltemp ; " LOC" ' store the location of the file pointer
 
 
pointer
 
 
Print Seek(#2) ; " = LOC+1"  
 
Print Seek(#2) ; " = LOC+1"  
  
 
Print Lof(#2) ; " length of file"
 
Print Lof(#2) ; " length of file"
Print Fileattr(#2) ; " file mode" ' should be 32 for  
+
Print Fileattr(#2) ; " file mode" ' should be 32 for binary
 
 
binary
 
 
Put #2 , Sn ' write a single
 
Put #2 , Sn ' write a single
 
Put #2 , Stxt ' write a string
 
Put #2 , Stxt ' write a string
Строка 1236: Строка 834:
 
Get #2 , Stxt ' get the string
 
Get #2 , Stxt ' get the string
 
Close #2
 
Close #2
</source>
+
</pre>
  
 
=== Seek ===
 
=== Seek ===
Function: Returns the position of the next Byte to be  
+
Function: Returns the position of the next Byte to be read or written.
 
+
Statement: Sets the position of the next Byte to be read or written.
read or written.
 
Statement: Sets the position of the next Byte to be read  
 
 
 
or written.
 
 
 
This function returns the position of the next Byte to
 
  
be read or written. If an error occures, 0 is returned.  
+
This function returns the position of the next Byte to be read or written. If an error occures, 0 is returned. Check DOS-Error in variable gbDOSError<ref name="OkrDOS">Подробнее [[Окружение AVR-DOS]]</ref>.
 
+
The statetement also returns an error in the gbDOSerror variable in the event that an error occurs.
Check DOS-Error in variable gbDOSError<ref  
+
You can for example not set the fileposition behinds the filesize.
 
+
In QB/VB the file is filled with 0 bytes when you set the filepointer behind the size of the file. For embedded systems this does not seem a good idea.
name="OkrDOS">Подробнее [[Окружение AVR-DOS]]</ref>.
+
Seek and Loc seems to do the same function, but take care : the seek function will return the position of the next read/write, while the Loc function returns the position of the last read/write. You may say that Seek = Loc+1.
The statetement also returns an error in the gbDOSerror  
 
 
 
variable in the event that an error occurs.
 
You can for example not set the fileposition behinds the  
 
 
 
filesize.
 
In QB/VB the file is filled with 0 bytes when you set  
 
 
 
the filepointer behind the size of the file. For  
 
 
 
embedded systems this does not seem a good idea.
 
Seek and Loc seems to do the same function, but take  
 
 
 
care : the seek function will return the position of the  
 
 
 
next read/write, while the Loc function returns the  
 
 
 
position of the last read/write. You may say that Seek =  
 
 
 
Loc+1.
 
 
'''Difference with QB'''
 
'''Difference with QB'''
In QB/VB you can use seek to make the file bigger. When  
+
In QB/VB you can use seek to make the file bigger. When a file is 100 bytes long, setting the filepointer to 200 will increase the file with 0 bytes. By design this is not the case in AVR-DOS.
 
 
a file is 100 bytes long, setting the filepointer to 200  
 
 
 
will increase the file with 0 bytes. By design this is  
 
 
 
not the case in AVR-DOS.
 
  
 
<code>Function: NextReadWrite = Seek (#bFileNumber)
 
<code>Function: NextReadWrite = Seek (#bFileNumber)
Строка 1291: Строка 857:
 
|-
 
|-
 
| NextReadWrite(Long)
 
| NextReadWrite(Long)
| A Long Variable, which is assigned with the Position  
+
| A Long Variable, which is assigned with the Position of the next Byte to be read or written (1-based)
 
 
of the next Byte to be read or written (1-based)
 
 
|-
 
|-
 
| NewPos(Long)
 
| NewPos(Long)
| A Long variable that holds the new position the  
+
| A Long variable that holds the new position the filepointer must be set too.
 
 
filepointer must be set too.
 
 
|}
 
|}
  
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">Open "test.biN" For Binary As #2
+
<pre>Open "test.biN" For Binary As #2
 
Put #2 , B ' write a byte
 
Put #2 , B ' write a byte
 
Put #2 , W ' write a word
 
Put #2 , W ' write a word
 
Put #2 , L ' write a long
 
Put #2 , L ' write a long
 
Ltemp = Loc(#2) + 1 ' get the position of the next byte
 
Ltemp = Loc(#2) + 1 ' get the position of the next byte
Print Ltemp ; " LOC" ' store the location of the file  
+
Print Ltemp ; " LOC" ' store the location of the file pointer
 
 
pointer
 
 
Print Seek(#2) ; " = LOC+1"  
 
Print Seek(#2) ; " = LOC+1"  
  
Строка 1318: Строка 878:
 
Open "test.bin" For Binary As #2
 
Open "test.bin" For Binary As #2
 
Seek #2 , Ltemp ' set the filepointer
 
Seek #2 , Ltemp ' set the filepointer
Sn = 1.23 ' change the single value so we can check it  
+
Sn = 1.23 ' change the single value so we can check it better
 
 
better
 
 
Put #2 , Sn = 1 'specify the file position
 
Put #2 , Sn = 1 'specify the file position
 
Close #2
 
Close #2
</source>
+
</pre>
  
 
== Свойства файла ==
 
== Свойства файла ==
Строка 1329: Строка 887:
 
Returns the End of File Status.
 
Returns the End of File Status.
  
This functions returns information about the End of File  
+
This functions returns information about the End of File Status.
 
 
Status.
 
 
{| class="wikitable"
 
{| class="wikitable"
 
! Return value
 
! Return value
Строка 1342: Строка 898:
 
| EOF
 
| EOF
 
|}
 
|}
In case of error (invalid filenumber) 255 (EOF) is  
+
In case of error (invalid filenumber) 255 (EOF) is returned too.
 
 
returned too.
 
 
   
 
   
  
Строка 1359: Строка 913:
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">Ff = Freefile() ' get file handle
+
<pre>Ff = Freefile() ' get file handle
Open "test.txt" For Input As #ff ' we can use a constant  
+
Open "test.txt" For Input As #ff ' we can use a constant for the file too
 
 
for the file too
 
 
Print Lof(#ff) ; " length of file"
 
Print Lof(#ff) ; " length of file"
Print Fileattr(#ff) ; " file mode" ' should be 1 for  
+
Print Fileattr(#ff) ; " file mode" ' should be 1 for input
 
 
input
 
 
Do
 
Do
 
Line Input #ff , S ' read a line
 
Line Input #ff , S ' read a line
Строка 1372: Строка 922:
 
Print S ' print on terminal emulator
 
Print S ' print on terminal emulator
 
Loop Until Eof(ff) <> 0
 
Loop Until Eof(ff) <> 0
'The EOF() function returns a non-zero number when the  
+
'The EOF() function returns a non-zero number when the end of the file is reached
 
 
end of the file is reached
 
 
'This way we know that there is no more data we can read
 
'This way we know that there is no more data we can read
 
Close #ff
 
Close #ff
</source>
+
</pre>
  
 
=== LOC ===
 
=== LOC ===
Returns the position of last read or written Byte of the  
+
Returns the position of last read or written Byte of the file.
 
 
file.
 
 
 
This function returns the position of the last read or
 
 
 
written Byte. If an error occurs, 0 is returned. Check
 
 
 
DOS-Error in variable gbDOSError<ref
 
 
 
name="OkrDOS">Подробнее [[Окружение AVR-DOS]]</ref>. If
 
 
 
the file position pointer is changed with the command
 
 
 
SEEK, this function can not be used till the next
 
  
read/write operation.
+
This function returns the position of the last read or written Byte. If an error occurs, 0 is returned. Check DOS-Error in variable gbDOSError<ref name="OkrDOS">Подробнее [[Окружение AVR-DOS]]</ref>. If the file position pointer is changed with the command SEEK, this function can not be used till the next read/write operation.
 
'''Difference with QB'''
 
'''Difference with QB'''
This function differs from QB. In QB the byte position  
+
This function differs from QB. In QB the byte position is divided by 128.
 
 
is divided by 128.
 
  
 
<code>lLastReadWritten = Loc (#bFileNumber)</code>
 
<code>lLastReadWritten = Loc (#bFileNumber)</code>
Строка 1409: Строка 941:
 
|-
 
|-
 
| lLastReadWritten(Long)
 
| lLastReadWritten(Long)
| Variable, whichsigned with the Position of last read  
+
| Variable, whichsigned with the Position of last read or written Byte (1-based)
 
 
or written Byte (1-based)
 
 
|}
 
|}
  
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">'open the file in BINARY mode
+
<pre>'open the file in BINARY mode
 
Open "test.biN" For Binary As #2
 
Open "test.biN" For Binary As #2
 
Put #2 , B ' write a byte
 
Put #2 , B ' write a byte
Строка 1422: Строка 952:
 
Put #2 , L ' write a long
 
Put #2 , L ' write a long
 
Ltemp = Loc(#2) + 1 ' get the position of the next byte
 
Ltemp = Loc(#2) + 1 ' get the position of the next byte
Print Ltemp ; " LOC" ' store the location of the file  
+
Print Ltemp ; " LOC" ' store the location of the file pointer
 
 
pointer
 
 
Print Lof(#2) ; " length of file"
 
Print Lof(#2) ; " length of file"
Print Fileattr(#2) ; " file mode" ' should be 32 for  
+
Print Fileattr(#2) ; " file mode" ' should be 32 for binary
 
 
binary
 
 
Put #2 , Sn ' write a single
 
Put #2 , Sn ' write a single
 
Put #2 , Stxt ' write a string
 
Put #2 , Stxt ' write a string
Строка 1434: Строка 960:
 
Flush #2 ' flush to disk
 
Flush #2 ' flush to disk
 
Close #2
 
Close #2
</source>
+
</pre>
  
 
=== LOF ===
 
=== LOF ===
 
Returns the length of the File in Bytes.
 
Returns the length of the File in Bytes.
  
This function returns the length of an opened file. If  
+
This function returns the length of an opened file. If an error occures, 0 is returned. Check DOS-Error in variable gbDOSError<ref name="OkrDOS">Подробнее [[Окружение AVR-DOS]]</ref>.
 
 
an error occures, 0 is returned. Check DOS-Error in  
 
 
 
variable gbDOSError<ref name="OkrDOS">Подробнее  
 
 
 
[[Окружение AVR-DOS]]</ref>.
 
  
 
<code>lFileLength = LOF (#bFileNumber)</code>
 
<code>lFileLength = LOF (#bFileNumber)</code>
Строка 1454: Строка 974:
 
|-
 
|-
 
| LFileLength(Long)
 
| LFileLength(Long)
| Variable, which issigned with the Length of the file  
+
| Variable, which issigned with the Length of the file (1-based)
 
 
(1-based)
 
 
|}
 
|}
  
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">'open the file in BINARY mode
+
<pre>'open the file in BINARY mode
 
Open "test.biN" For Binary As #2
 
Open "test.biN" For Binary As #2
 
Put #2 , B ' write a byte
 
Put #2 , B ' write a byte
Строка 1467: Строка 985:
 
Put #2 , L ' write a long
 
Put #2 , L ' write a long
 
Ltemp = Loc(#2) + 1 ' get the position of the next byte
 
Ltemp = Loc(#2) + 1 ' get the position of the next byte
Print Ltemp ; " LOC" ' store the location of the file  
+
Print Ltemp ; " LOC" ' store the location of the file pointer
 
 
pointer
 
 
Print Lof(#2) ; " length of file"
 
Print Lof(#2) ; " length of file"
Print Fileattr(#2) ; " file mode" ' should be 32 for  
+
Print Fileattr(#2) ; " file mode" ' should be 32 for binary
 
 
binary
 
 
Put #2 , Sn ' write a single
 
Put #2 , Sn ' write a single
 
Put #2 , Stxt ' write a string
 
Put #2 , Stxt ' write a string
Строка 1479: Строка 993:
 
Flush #2 ' flush to disk
 
Flush #2 ' flush to disk
 
Close #2
 
Close #2
</source>
+
</pre>
  
 
=== FileAttr ===
 
=== FileAttr ===
 
Returns the file open mode.
 
Returns the file open mode.
  
This functions returns information about the File open  
+
This functions returns information about the File open mode
 
 
mode
 
  
 
<code>bFileAttribut = FileAttr (bFileNumber)</code>
 
<code>bFileAttribut = FileAttr (bFileNumber)</code>
Строка 1519: Строка 1031:
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">'open the file in BINARY mode
+
<pre>'open the file in BINARY mode
 
Open "test.biN" For Binary As #2
 
Open "test.biN" For Binary As #2
Print Fileattr(#2) ; " file mode" ' should be 32 for  
+
Print Fileattr(#2) ; " file mode" ' should be 32 for binary
 
 
binary
 
 
Put #2 , Sn ' write a single
 
Put #2 , Sn ' write a single
 
Put #2 , Stxt ' write a string
 
Put #2 , Stxt ' write a string
 
Close #2
 
Close #2
</source>
+
</pre>
  
 
== Другие ==
 
== Другие ==
Строка 1533: Строка 1043:
 
Writes the Content of a File into SRAM.
 
Writes the Content of a File into SRAM.
  
This function writes the content of a file to a desired  
+
This function writes the content of a file to a desired space in SRAM. A free handle is needed for this function.
 
 
space in SRAM. A free handle is needed for this  
 
 
 
function.
 
  
 
<code>BLoad sFileName, wSRAMPointer</code>
 
<code>BLoad sFileName, wSRAMPointer</code>
Строка 1546: Строка 1052:
 
|-
 
|-
 
| wSRAMPointer(Word)
 
| wSRAMPointer(Word)
| Variable, which holds the SRAM Address to which the  
+
| Variable, which holds the SRAM Address to which the content of the file should be written
 
 
content of the file should be written
 
 
|}
 
|}
  
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">'now the good old bsave and bload
+
<pre>'now the good old bsave and bload
 
Dim Ar(100) As Byte , I As Byte
 
Dim Ar(100) As Byte , I As Byte
 
For I = 1 To 100
 
For I = 1 To 100
Строка 1573: Строка 1077:
 
Next
 
Next
 
Print
 
Print
</source>
+
</pre>
  
 
=== Bsave ===
 
=== Bsave ===
 
Save a range in SRAM to a Fileю
 
Save a range in SRAM to a Fileю
  
This function writes a range from the SRAM to a file. A  
+
This function writes a range from the SRAM to a file. A free file handle is needed for this function.
 
 
free file handle is needed for this function.
 
  
 
<code>BSave sFileName, wSRAMPointer, wLength</code>
 
<code>BSave sFileName, wSRAMPointer, wLength</code>
Строка 1589: Строка 1091:
 
|-
 
|-
 
| wSRAMPointer(Word)
 
| wSRAMPointer(Word)
| Variable, which holds the SRAM Address, from where  
+
| Variable, which holds the SRAM Address, from where SRAM should be written to a File
 
 
SRAM should be written to a File
 
 
|-
 
|-
 
| wLength(Word)
 
| wLength(Word)
| Count of Bytes from SRAM, which should be written to  
+
| Count of Bytes from SRAM, which should be written to the file
 
 
the file
 
 
|}
 
|}
  
 
Пример вызова:
 
Пример вызова:
  
<source lang="vb">'now the good old bsave and bload
+
<pre>'now the good old bsave and bload
 
Dim Ar(100) As Byte , I As Byte
 
Dim Ar(100) As Byte , I As Byte
 
For I = 1 To 100
 
For I = 1 To 100
Строка 1621: Строка 1119:
 
Next
 
Next
 
Print
 
Print
</source>
+
</pre>
  
 
== Сноски ==
 
== Сноски ==

Версия 18:49, 6 января 2009

Список команд AVR-DOS — список функций библиотеки AVR-DOS.

Диск/Директория

InitFileSystem

Читает Master boot record и partition boot record (Sector) диска(флэш-карты) и инициализирует файловую систему.

Эта функция должна быть вызвана перед любым другим использованием системы!

bErrorCode = InitFileSystem (bPartitionNumber)

bErrorCode(Byte) Код ошибки, возвращает 0 если система успешно запущена.
bPartitionNumber(Byte) Partitionnumber on the Flashcard Drive (normally 1, but use 0 on mediums without Master boot record)

Пример вызова:

Dim bErrorCode as Byte
bErrorCode = InitFileSystem(1)
If bErrorCode > 0 then
Print "Error: " ; bErrorCode
Else
Print "Filesystem successfully initialized"
End If

DiskSize

Возвращает размер диска.

lSize = DiskSize ()

lSize(Long) Объем диска в КБайтах

Пример вызова:

Dim Gbtemp1 As Byte ' scratch byte
Gbtemp1 = Initfilesystem(1) ' we must init the filesystem once
If Gbtemp1 > 0 Then
Print #1 , "Error " ; Gbtemp1
Else
Print #1 , " OK"
Print "Disksize : " ; Disksize() ' show disk size in Kbytes
Print "Disk free: " ; Diskfree() ' show free space too
End If

DiskFree

Возвращает размер свободного пространства диска.

lFreeSize = DiskFree ()

lFreeSize(Long) Размер свободной области в КБайтах

Пример вызова:

Dim Gbtemp1 As Byte ' scratch byte
Gbtemp1 = Initfilesystem(1) ' we must init the filesystem once
If Gbtemp1 > 0 Then
Print #1 , "Error " ; Gbtemp1
Else
Print #1 , " OK"
Print "Disksize : " ; Disksize() ' show disk size in Kbytes
Print "Disk free: " ; Diskfree() ' show free space too
End If

Kill

Удаляет файл с диска. Открытый файл не может быть удален. Специальные символы(WildCards) в имени файла, применение масок не поддерживаются. Код ошибки хранится в глобальной переменной gDOSError[1].

Kill sFileName

sFileName(String) Имя файла в текущей директории

Пример вызова:

'We can use the KILL statement to delete a file.
'A file mask is not supported
Print "Kill (delete) file demo"
Kill "test.txt"

Dir

Возвращает имя файла, удовлетворяющее маске.

Первый вызов функции содержит маску. Все последующие вызовы совершаются без маски. Фактически, когда вы хотите получить имя следующего файла в данной директории, удовлетворяющее маске, вы должны вызывать вариант функции без параметров после первого вызова.

sFile = Dir(mask)

sFile = Dir()

SFile(String) Имя файла. Строка пуста, если больше нет файлов, удовлетворяющих маске
Mask(String) Файловая маска, удовлетворяющая требованиям обычного DOS, напр. *.TXT. Маска *.* удовлетворяет всем файлам

Пример вызова:

'Lets have a look at the file we created
Print "Dir function demo"
S = Dir( "*.*")
'The first call to the DIR() function must contain a file mask
' The * means everything.
'
While Len(s) > 0 ' if there was a file found
Print S ; " " ; Filedate() ; " " ; Filetime() ; " " ; Filelen()
' print file , the date the fime was created/changed , the time and the size of the file
S = Dir() ' get next
Wend

FileLen

Возвращает размер файла.

lSize = FileLen ()

lSize = FileLen (file)

lSize(Long) Размер файла в Байтах
File(String) Имя файла в текущей директории. Если не указано, параметром считается последний файл, выбранный с помощью DIR()

Пример вызова:

Print "File demo"
Print Filelen( "josef.img") ; " length" ' length of file
Print Filetime( "josef.img") ; " time" ' time file was changed
Print Filedate( "josef.img") ; " date" ' file date

FileDate

Возвращает дату создания или изменения(?) файла.

sDate = FileDate ()

sDate = FileDate (file)

sDate(String) Дата создания или изменения(?) файла
File(String) Имя файла в текущей директории. Если не указано, параметром считается последний файл, выбранный с помощью DIR()

Пример вызова:

Print "File demo"
Print Filelen( "josef.img") ; " length" ' length of file
Print Filetime( "josef.img") ; " time" ' time file was changed
Print Filedate( "josef.img") ; " date" ' file date

FileTime

Возвращает время создания или изменения(?) файла.

sTime = FileTime ()

sTime = FileTime (file)

sTime(String) Время создания или изменения(?) файла
File(String) Имя файла в текущей директории. Если не указано, параметром считается последний файл, выбранный с помощью DIR()

Пример вызова:

Print "File demo"
Print Filelen( "josef.img") ; " length" ' length of file
Print Filetime( "josef.img") ; " time" ' time file was changed
Print Filedate( "josef.img") ; " date" ' file date

FileDateTime

Возвращает дату и время создания или изменения(?) файла.

Var = FileDateTime ()

Var = FileDateTime (file)

Var(String) Время создания или изменения(?) файла
File(String) When the target variable is a string, it must be dimensioned with a length of at least 17 bytes.
File(Byte array) When the target variable is a byte array, the array size must be at least 6 bytes.
File(Numeric) When you use a numeric variable, the internal file date and time format will be used.

Пример вызова:

' Read and print Directory and show Filename, Date, Time, Size
' for all files matching pStr1 and create/update younger than pDays
Sub Directorylist(pstr1 As String , Byval Pdays As Word)
Local lFileName as String * 12 ' hold file name for print
Local lwCounter as Word , lFileSizeSum as Long ' for summary
Local lwNow as Word , lwDays as Word
Local lSec as Byte , lMin as Byte , lHour as byte , lDay as byte , lMonth as byte , lYear as byte
print "Listing of all Files matching " ; pStr1 ; " and create/last update date within " ; pdays ; " days"
lwNow = SysDay()
lwCounter = 0 : lFileSizeSum = 0
lFileName = Dir(pStr1)
While lFileName <> ""
lsec = FileDateTime()
lwDays = lwNow - SysDay(lDay) ' Days between Now and last File Update; uses lDay, lMonth, lYear
if lwDays <= pDays then ' days smaller than desired with parameter
print lFileName ; FileDate() ; " " ; FileTime() ; " " ; filelen()
incr lwCounter : lFileSizeSum = FileLen() + lFileSizeSum
end if
lFileName = Dir()
WEnd
print lwCounter ; " File(s) found with " ; lFileSizeSum ; " Byte(s)"
End Sub

GetAttr

Возвращает атрибуты файла.

bAttr = FileDate ()

bAttr = FileDate (file)

bAttr(Byte) Атрибуты файла, совместимые с DOS-форматом. Байт расшифровывается как 00ADVSHR, где биты 5-0:

A - Архивный
D - Директория
V - Volume ID(?)
S - Системный
H - Скрытый
R - Только чтение

File(String) Имя файла в текущей директории. Если не указано, параметром считается последний файл, выбранный с помощью DIR()

Пример вызова:

Print "File demo"
Print Filelen( "josef.img") ; " length" ' length of file
Print Filetime( "josef.img") ; " time" ' time file was changed
Print Filedate( "josef.img") ; " date" ' file date
Print Bin(GetAttr(“Josef.img”)) ; “Attributes” ‘ DOS Attributes

Name

Переименовывает файл в текущей директории. Файл с новым именем не должен существовать в текущей директории, иначе команда вернет ошибку. Код ошибки можно посмотреть в глобальной переменной gbDOSError[1].

Name <strOldFilename> As <strNewFileName>

strOldFileName(String) Старое имя файла
strNewFileName(String) Новое имя файла

Пример вызова:

Dim strOldFileName as String * 12
Dim strNewFileName as String * 12

strOldFileName = "Data.txt"
strNewFileName = "Data.bak"
Name strOldFilename As strNewFileName

ChDir

Изменяет текущую директорию.
Функции Kill, Dir, ChDir, MkDir, RmDir, Name, FileLen, FileDateTime, FileDate, FileTime, GetAttr, Open, BLoad и BSave работают только в текущей директории. Обращаться к файлу с помощью составного пути запрещается!

ChDIR (strDirectoryName)

strDirectoryName(String) Путь к новой директории, длина не более 8 символов. Допускаются следующие спецсимволы:

"." - на директорию выше
"\" - в корень диска

Пример вызова:

Dim strDirectory as String * 12

ChDir "SubDir"
' or
strDirectory = "SubDir"
ChDir strDirectory

' Change to next higher directory
ChDir "."
' Change to Root Directory
strDirectory = "\"
ChDir strDirectory

MkDir

Создает каталог в текущей директории.

MkDIR (strDirectoryName)

strDirectoryName(String) Имя новой директории, не более 8 символов

Пример вызова:

Dim strDirectory as String * 12
MkDir "NewDir"
' or
strDirectory = "NewDir"
MkDir strDirectory

RmDir

Удаляет каталог в текущей директории.

RmDIR (strDirectoryName)

strDirectoryName(String) Имя каталога для удаления, не более 8 символов

Пример вызова:

Dim strDirectory as String * 12
MkDir "NewDir"
' or
strDirectory = "NewDir"
MkDir strDirectory

Файлы

FreeFile

Возвращает свободный файловый номер(filenumber). Функция обеспечивает совместимость с QB.

bFileNumber = FreeFile()

bFileNumber(Byte) Свободный файловый номер, который может использоваться для открытия новых файлов. В отличие от QB, этот файловый номер начинается с 128 и заканчивается 255. Используйте числа 1..127 для пользовательских номеров, чтобы избежать конфликтов номеров при использованиии функции.

Пример вызова:

Ff = Freefile() ' get file handle
Open "test.txt" For Input As #ff ' we can use a constant for the file too
Print Lof(#ff) ; " length of file"
Print Fileattr(#ff) ; " file mode" ' should be 1 for input
Do
Line Input #ff , S ' read a line
' line input is used to read a line of text from a file
Print S ' print on terminal emulator
Loop Until Eof(ff) <> 0
'The EOF() function returns a non-zero number when the end of the file is reached
'This way we know that there is no more data we can read
Close #ff

Open

Открывает устройство.

OPEN "device" for MODE As #channel

OPEN file FOR MODE as #channel

Device The default device is COM1 and you don't need to open a channel to use INPUT/OUTPUT on this device.

With the implementation of the software UART, the compiler must know to which pin/device you will send/receive the data. So that is why the OPEN statement must be used. It tells the compiler about the pin you use for the serial input or output and the baud rate you want to use. COMB.0:9600,8,N,2 will use PORT B.0 at 9600 baud with 2 stopbits.

The format for COM1 and COM2 is : COM1: or COM2:

There is no speed/baud rate parameter since the default baud rate will be used that is specified with $BAUD or $BAUD1

The format for the software UART is: COMpin:speed,8,N,stopbits[,INVERTED] Where pin is the name of the PORT-pin. Speed must be specified and stop bits can be 1 or 2. 7 bit data or 8 bit data may be used. For parity N, O or E can be used.

An optional parameter ,INVERTED can be specified to use inverted RS-232. Open "COMD.1:9600,8,N,1,INVERTED" For Output As #1 , will use pin PORTD.1 for output with 9600 baud, 1 stop bit and with inverted RS-232.

For the AVR-DOS filesystem, Device can also be a string or filename constant like

"readme.txt" or sFileName

Mode You can use BINARY or RANDOM for COM1 and COM2, but for the software UART pins, you must specify INPUT or OUTPUT

For the AVR-DOS filesystem, MODE may be INPUT, OUTPUT, APPEND or BINARY

Channel The number of the channel to open. Must be a positive constant >0

For the AVR-DOS filesystem, the channel may be a positive constant or a numeric variable. Note that the AVD-DOS filesystem uses real filehandles. The software UART does not use real file handles.

Пример вызова:

OPEN "com1:" for binary as #1
Call test
End
Sub test
Print #1, "test" 
End Sub
Close #1

Close

Освобождает открытое устройство. The statements that support the device are PRINT , INPUT and INPUTHEX , INKEY, WAITKEY. Every opened device must be closed using the CLOSE #channel statement. Of course, you must use the same channel number. The best place for the CLOSE statement is at the end of your program. The INPUT statement in combination with the software UART, will not echo characters back because there is no default associated pin for this. For the AVR-DOS filesystem, you may place the CLOSE at any place in your program. This because the filesystem supports real file handles.

OPEN "device" for MODE As #channel
...
CLOSE #channel

Device The default device is COM1 and you don't need to open a channel to use INPUT/OUTPUT on this device.

With the implementation of the software UART, the compiler must know to which pin/device you will send/receive the data. So that is why the OPEN statement must be used. It tells the compiler about the pin you use for the serial input or output and the baud rate you want to use. COMB.0:9600,8,N,2 will use PORT B.0 at 9600 baud with 2 stop bits.

The format for COM1 is : COM1:

Some chips have 2 UARTS. You can use COM2: to open the second HW UART.

The format for the software UART is: COMpin:speed,8,N,stop bits[,INVERTED] Where pin is the name of the PORT-pin. Speed must be specified and stop bits can be 1 or 2. An optional parameter ,INVERTED can be specified to use inverted RS-232. Open "COMD.1:9600,8,N,1,INVERTED" For Output As #1 , will use pin PORTD.1 for output with 9600 baud, 1 stop bit and with inverted RS-232

MODE You can use BINARY or RANDOM for COM1 and COM2, but for the software UART pins, you must specify INPUT or OUTPUT
Channel The number of the channel to open. Must be a positive constant >0

Пример вызова:

$crystal = 10000000 'change to the value of the XTAL you have installed

Dim B As Byte

'Optional you can fine tune the calculated bit delay
'Why would you want to do that?
'Because chips that have an internal oscillator may not
'run at the speed specified. This depends on the voltage, temp etc.
'You can either change $CRYSTAL or you can use
'BAUD #1,9610

'In this example file we use the DT006 from www.simmstick.com
'This allows easy testing with the existing serial port
'The MAX232 is fitted for this example.
'Because we use the hardware UART pins we MAY NOT use the hardware UART
'The hardware UART is used when you use PRINT, INPUT or other related statements
'We will use the software UART.
Waitms 100

'open channel for output
Open "comd.1:19200,8,n,1" For Output As #1
Print #1 , "serial output"


'Now open a pin for input
Open "comd.0:19200,8,n,1" For Input As #2
'since there is no relation between the input and output pin
'there is NO ECHO while keys are typed
Print #1 , "Number"
'get a number
Input #2 , B
'print the number
Print #1 , B

'now loop until ESC is pressed
'With INKEY() we can check if there is data available
'To use it with the software UART you must provide the channel
Do
'store in byte
B = Inkey(#2)
'when the value > 0 we got something
If B > 0 Then
Print #1 , Chr(b) 'print the character
End If
Loop Until B = 27


Close #2
Close #1


'OPTIONAL you may use the HARDWARE UART
'The software UART will not work on the hardware UART pins
'so you must choose other pins
'use normal hardware UART for printing
'Print B


'When you dont want to use a level inverter such as the MAX-232
'You can specify ,INVERTED :
'Open "comd.0:300,8,n,1,inverted" For Input As #2
'Now the logic is inverted and there is no need for a level converter
'But the distance of the wires must be shorter with this
End

Flush

Write current buffer of File to Card and updates Directory. This function writes all information of an open file, which is not saved yet to the Disk. Normally the Card is updated, if a file will be closed or changed to another sector. When no filenumber is specified, all open files will be flushed.

Flush #bFileNumber

Flush

BFileNumber(Byte) Filenumber, which identifies an opened file such as #1 or #ff

Пример вызова:

$include "startup.inc"

'open the file in BINARY mode
Open "test.biN" For Binary As #2
Put #2 , B ' write a byte
Put #2 , W ' write a word
Put #2 , L ' write a long
Ltemp = Loc(#2) + 1 ' get the position of the next byte
Print Ltemp ; " LOC" ' store the location of the file pointer
Print Lof(#2) ; " length of file"
Print Fileattr(#2) ; " file mode" ' should be 32 for binary
Put #2 , Sn ' write a single
Put #2 , Stxt ' write a string

Flush #2 ' flush to disk
Close #2

Print

Send output to the RS-232 port. Writes a string to a file. You can use a semicolon (;) to print more than one variable at one line. When you end a line with a semicolon, no linefeed will be added. The PRINT routine can be used when you have a RS-232 interface on your uP. The RS-232 interface can be connected to a serial communication port of your computer. This way you can use a terminal emulator as an output device. You can also use the build in terminal emulator. The AVR-DOS filesystem also supports PRINT. But in that case, only strings can be written to disk.

PRINT var ; " constant"

Var(...) The variable or constant to print

Пример вызова:

Dim A As Byte , B1 As Byte , C As Integer , S As String * 4
A = 1
Print "print variable a " ; A
Print 'new line
Print "Text to print." 'constant to print


B1 = 10
Print Hex(b1) 'print in hexa notation
C = &HA000 'assign value to c%
Print Hex(c) 'print in hex notation
Print C 'print in decimal notation

C = -32000
Print C
Print Hex(c)
Rem Note That Integers Range From -32767 To 32768
End

Write

Writes data to a sequential file. When you write a variables value, you do not write the binary representatrion but the ASCII representation. When you look in a file it contains readable text. When you use PUT, to write binary info, the files are not readable or contain unreadable characters. Strings written are surrounded by string delimeters "". Multiple variables written are separated by a comma. Look to this example:

Dim S as String * 10 , W as Word
S="hello" : W = 100
OPEN "test.txt" For OUTPUT as #1
WRITE #1, S , W
CLOSE #1

The file content will look like this : "hello",100. Use INPUT to read the values from value.

Write #ch , data [,data1]

Ch(...) A channel number, which identifies an opened file. This can be a hard coded constant or a variable
Data , data1 A variable who’s content are written to the file

Пример вызова:

Dim S As string * 10 , W As Word ,L As Long
S = "write"
Open "write.dmo" For Output As #2
Write #2 , S , W , L ' write is also supported
Close #2
Open "write.dmo" For Input As #2
Input #2 , S , W , L ' write is also supported
Close #2
Print S ; " " ; W ; " " ; L

Input

Read a Line from an opened File. Only valid for files opened in mode INPUT. Line INPUT works only with strings. It is great for working on text files.

LineInput #bFileNumber, sLineText

BfileNumber(Byte) Filenumber, which identifies an opened file
SlineText(String) A string, which is assigned with the next line from the file

Пример вызова:

'Ok we want to check if the file contains the written lines
Ff = Freefile() ' get file handle
Open "test.txt" For Input As #ff ' we can use a constant for the file too
Print Lof(#ff) ; " length of file"
Print Fileattr(#ff) ; " file mode" ' should be 1 for input
Do
Line Input #ff , S ' read a line
' line input is used to read a line of text from a file
Print S ' print on terminal emulator
Loop Until Eof(ff) <> 0
'The EOF() function returns a non-zero number when the end of the file is reached
'This way we know that there is no more data we can read
Close #ff

Line Input

Read a Line from an opened File. Only valid for files opened in mode INPUT. Line INPUT works only with strings. It is great for working on text files.

LineInput #bFileNumber, sLineText

BfileNumber(Byte) Filenumber, which identifies an opened file
SlineText(String) A string, which is assigned with the next line from the file.

Пример вызова:

'Ok we want to check if the file contains the written lines
Ff = Freefile() ' get file handle
Open "test.txt" For Input As #ff ' we can use a constant for the file too
Print Lof(#ff) ; " length of file"
Print Fileattr(#ff) ; " file mode" ' should be 1 for input
Do
Line Input #ff , S ' read a line
' line input is used to read a line of text from a file
Print S ' print on terminal emulator
Loop Until Eof(ff) <> 0
'The EOF() function returns a non-zero number when the end of the file is reached
'This way we know that there is no more data we can read
Close #ff

Get

Reads a byte from the hardware or software UART. Reads data from a file opened in BINARY mode.

GET in combination with the software/hardware UART is provided for compatibility with BASCOM-8051. It reads one byte. GET in combination with the AVR-DOS filesystem is very flexible and versatile. It works on files opened in BINARY mode and you can reads all data types. By default you only need to provide the variable name. When the variable is a byte, 1 byte wil be read. When the variable is a word or integer, 2 bytes will be read. When the variable is a long or single, 4 bytes will be read. When the variable is a string, the number of bytes that will be read is equal to the dimensioned size of the string. DIM S as string * 10 , would read 10 bytes. Note that when you specify the length for a string, the maximum length is 255. The maximum length for a non-string array is 65535.

Example : 
GET #1 , var ,,2 ‘ read 2 bytes, start at current position
GET #1, var , PS ‘ start at position stored in long PS
GET #1, var , PS, 2 ‘ start at position stored in long PS and read 2 bytes

GET #channel, var

GET #channel, var , [pos] [, length]

#channel(...) A channel number, which identifies an opened file. This can be a hard coded constant or a variable
Var(...) The variable or variable array that will be assigned with the data from the file
Pos(...) This is an optional parameter that may be used to specify the postion where the reading must start from. This must be a long variable
Length(...) This is an optional parameter that may be used to specify how many bytes must be read from the file.

Пример вызова:

'for the binary file demo we need some variables of different types
Dim B As Byte , W As Word , L As Long , Sn As Single , Ltemp As Long
Dim Stxt As String * 10
B = 1 : W = 50000 : L = 12345678 : Sn = 123.45 : Stxt = "test"

'open the file in BINARY mode
Open "test.biN" For Binary As #2
Put #2 , B ' write a byte
Put #2 , W ' write a word
Put #2 , L ' write a long
Ltemp = Loc(#2) + 1 ' get the position of the next byte
Print Ltemp ; " LOC" ' store the location of the file pointer
Print Seek(#2) ; " = LOC+1" 

Print Lof(#2) ; " length of file"
Print Fileattr(#2) ; " file mode" ' should be 32 for binary
Put #2 , Sn ' write a single
Put #2 , Stxt ' write a string

Flush #2 ' flush to disk
Close #2

'now open the file again and write only the single
Open "test.bin" For Binary As #2
L = 1 'specify the file position
B = Seek(#2 , L) ' reset is the same as using SEEK #2,L
Get #2 , B ' get the byte
Get #2 , W ' get the word
Get #2 , L ' get the long
Get #2 , Sn ' get the single
Get #2 , Stxt ' get the string
Close #2

Put

Writes a byte to the hardware or software UART. Writes data to a file opened in BINARY mode.

PUT in combination with the software/hardware UART is provided for compatibility with BASCOM-8051. It writes one byte PUT in combination with the AVR-DOS filesystem is very flexible and versatile. It works on files opened in BINARY mode and you can write all data types. By default you only need to provide the variable name. When the variable is a byte, 1 byte wil be written. When the variable is a word or integer, 2 bytes will be written. When the variable is a long or single, 4 bytes will be written. When the variable is a string, the number of bytes that will be written is equal to the dimensioned size of the string. DIM S as string * 10 , would write 10 bytes. Note that when you specify the length for a string, the maximum length is 255. The maximum length for a non-string array is 65535. Example:

PUT #1, var 
PUT #1, var , , 2 ‘ write 2 bytes at default position
PUT #1, var ,PS, 2 ‘ write 2 bytes at location storied in variable PS


PUT #channel, var

PUT #channel, var ,[pos] [,length]

#channel(...) A channel number, which identifies an opened file. This can be a hard coded constant or a variable.
Var(...) The variable or variable array that will be written to the file
Pos(...) This is an optional parameter that may be used to specify the postion where the data must be written to. This must be a long variable.
Length(...) This is an optional parameter that may be used to specify how many bytes must be written to the file.

Пример вызова:

'for the binary file demo we need some variables of different types
Dim B As Byte , W As Word , L As Long , Sn As Single , Ltemp As Long
Dim Stxt As String * 10
B = 1 : W = 50000 : L = 12345678 : Sn = 123.45 : Stxt = "test"

'open the file in BINARY mode
Open "test.biN" For Binary As #2
Put #2 , B ' write a byte
Put #2 , W ' write a word
Put #2 , L ' write a long
Ltemp = Loc(#2) + 1 ' get the position of the next byte
Print Ltemp ; " LOC" ' store the location of the file pointer
Print Seek(#2) ; " = LOC+1" 

Print Lof(#2) ; " length of file"
Print Fileattr(#2) ; " file mode" ' should be 32 for binary
Put #2 , Sn ' write a single
Put #2 , Stxt ' write a string

Flush #2 ' flush to disk
Close #2

'now open the file again and write only the single
Open "test.bin" For Binary As #2
L = 1 'specify the file position
B = Seek(#2 , L) ' reset is the same as using SEEK #2,L
Get #2 , B ' get the byte
Get #2 , W ' get the word
Get #2 , L ' get the long
Get #2 , Sn ' get the single
Get #2 , Stxt ' get the string
Close #2

Seek

Function: Returns the position of the next Byte to be read or written. Statement: Sets the position of the next Byte to be read or written.

This function returns the position of the next Byte to be read or written. If an error occures, 0 is returned. Check DOS-Error in variable gbDOSError[1]. The statetement also returns an error in the gbDOSerror variable in the event that an error occurs. You can for example not set the fileposition behinds the filesize. In QB/VB the file is filled with 0 bytes when you set the filepointer behind the size of the file. For embedded systems this does not seem a good idea. Seek and Loc seems to do the same function, but take care : the seek function will return the position of the next read/write, while the Loc function returns the position of the last read/write. You may say that Seek = Loc+1. Difference with QB In QB/VB you can use seek to make the file bigger. When a file is 100 bytes long, setting the filepointer to 200 will increase the file with 0 bytes. By design this is not the case in AVR-DOS.

Function: NextReadWrite = Seek (#bFileNumber)

Statement: Seek #bFileNumber, NewPos)

bFileNumber(Byte) Filenumber, which identifies an opened file
NextReadWrite(Long) A Long Variable, which is assigned with the Position of the next Byte to be read or written (1-based)
NewPos(Long) A Long variable that holds the new position the filepointer must be set too.

Пример вызова:

Open "test.biN" For Binary As #2
Put #2 , B ' write a byte
Put #2 , W ' write a word
Put #2 , L ' write a long
Ltemp = Loc(#2) + 1 ' get the position of the next byte
Print Ltemp ; " LOC" ' store the location of the file pointer
Print Seek(#2) ; " = LOC+1" 

Close #2

'now open the file again and write only the single
Open "test.bin" For Binary As #2
Seek #2 , Ltemp ' set the filepointer
Sn = 1.23 ' change the single value so we can check it better
Put #2 , Sn = 1 'specify the file position
Close #2

Свойства файла

EOF

Returns the End of File Status.

This functions returns information about the End of File Status.

Return value Status
0 NOT EOF
255 EOF

In case of error (invalid filenumber) 255 (EOF) is returned too.


bFileEOFStatus = EOF(#bFileNumber)

bFileEOFStatus(Byte) A Byte Variable, which issigned with the EOF Status
bFileNumber(Byte) Number of the opened file

Пример вызова:

Ff = Freefile() ' get file handle
Open "test.txt" For Input As #ff ' we can use a constant for the file too
Print Lof(#ff) ; " length of file"
Print Fileattr(#ff) ; " file mode" ' should be 1 for input
Do
Line Input #ff , S ' read a line
' line input is used to read a line of text from a file
Print S ' print on terminal emulator
Loop Until Eof(ff) <> 0
'The EOF() function returns a non-zero number when the end of the file is reached
'This way we know that there is no more data we can read
Close #ff

LOC

Returns the position of last read or written Byte of the file.

This function returns the position of the last read or written Byte. If an error occurs, 0 is returned. Check DOS-Error in variable gbDOSError[1]. If the file position pointer is changed with the command SEEK, this function can not be used till the next read/write operation. Difference with QB This function differs from QB. In QB the byte position is divided by 128.

lLastReadWritten = Loc (#bFileNumber)

bFileNumber(Byte) Filenumber, which identifies an opened file
lLastReadWritten(Long) Variable, whichsigned with the Position of last read or written Byte (1-based)

Пример вызова:

'open the file in BINARY mode
Open "test.biN" For Binary As #2
Put #2 , B ' write a byte
Put #2 , W ' write a word
Put #2 , L ' write a long
Ltemp = Loc(#2) + 1 ' get the position of the next byte
Print Ltemp ; " LOC" ' store the location of the file pointer
Print Lof(#2) ; " length of file"
Print Fileattr(#2) ; " file mode" ' should be 32 for binary
Put #2 , Sn ' write a single
Put #2 , Stxt ' write a string

Flush #2 ' flush to disk
Close #2

LOF

Returns the length of the File in Bytes.

This function returns the length of an opened file. If an error occures, 0 is returned. Check DOS-Error in variable gbDOSError[1].

lFileLength = LOF (#bFileNumber)

bFileNumber(Byte) Filenumber, which identifies an opened file
LFileLength(Long) Variable, which issigned with the Length of the file (1-based)

Пример вызова:

'open the file in BINARY mode
Open "test.biN" For Binary As #2
Put #2 , B ' write a byte
Put #2 , W ' write a word
Put #2 , L ' write a long
Ltemp = Loc(#2) + 1 ' get the position of the next byte
Print Ltemp ; " LOC" ' store the location of the file pointer
Print Lof(#2) ; " length of file"
Print Fileattr(#2) ; " file mode" ' should be 32 for binary
Put #2 , Sn ' write a single
Put #2 , Stxt ' write a string

Flush #2 ' flush to disk
Close #2

FileAttr

Returns the file open mode.

This functions returns information about the File open mode

bFileAttribut = FileAttr (bFileNumber)

Return value Open mode
1 INPUT
2 OUTPUT
8 APPEND
32 BINARY
bFileAttribut(Long) File open mode, See table
bFileNumber(Byte) Number of the opened file


Пример вызова:

'open the file in BINARY mode
Open "test.biN" For Binary As #2
Print Fileattr(#2) ; " file mode" ' should be 32 for binary
Put #2 , Sn ' write a single
Put #2 , Stxt ' write a string
Close #2

Другие

Bload

Writes the Content of a File into SRAM.

This function writes the content of a file to a desired space in SRAM. A free handle is needed for this function.

BLoad sFileName, wSRAMPointer

sFileName(Long) Name of the File to be read
wSRAMPointer(Word) Variable, which holds the SRAM Address to which the content of the file should be written

Пример вызова:

'now the good old bsave and bload
Dim Ar(100) As Byte , I As Byte
For I = 1 To 100
Ar(i) = I ' fill the array
Next

Wait 2

W = Varptr(ar(1))
Bsave "josef.img" , W , 100
For I = 1 To 100
Ar(i) = 0 ' reset the array
Next

Bload "josef.img" , W ' Josef you are amazing !

For I = 1 To 10
Print Ar(i) ; " " ;
Next
Print

Bsave

Save a range in SRAM to a Fileю

This function writes a range from the SRAM to a file. A free file handle is needed for this function.

BSave sFileName, wSRAMPointer, wLength

sFileName(Long) Name of the File to be written
wSRAMPointer(Word) Variable, which holds the SRAM Address, from where SRAM should be written to a File
wLength(Word) Count of Bytes from SRAM, which should be written to the file

Пример вызова:

'now the good old bsave and bload
Dim Ar(100) As Byte , I As Byte
For I = 1 To 100
Ar(i) = I ' fill the array
Next

Wait 2

W = Varptr(ar(1))
Bsave "josef.img" , W , 100
For I = 1 To 100
Ar(i) = 0 ' reset the array
Next

Bload "josef.img" , W ' Josef you are amazing !

For I = 1 To 10
Print Ar(i) ; " " ;
Next
Print

Сноски

  1. 1 2 3 4 5 Подробнее Окружение AVR-DOS

См. также