7.1 StdLib
memcpy - копирование области памяти
var memcpy(var dest, var src, var n)
- параметр var dest - куда копировать.
- параметр var src - откуда копировать.
- параметр var n - количество байт для копирования
- возвращаемое значение: количество скопированных байт.
memcmp - сравнение области памяти
var memcmp(var s1, var s2, var n)
- параметр var s1 - первая область памяти.
- параметр var s2 - вторая область памяти.
- параметр var n - количество сравниваемых байт.
- возвращаемое значение: 0 - если данные одинаковы, 1 - иначе.
Варианты функции:
var memcmp(var s1, literal, var n)
- параметр: var s1 - область памяти.
- параметр: literal - строковой литерал для сравнения.
- параметр var n - количество сравниваемых байт.
- возвращаемое значение: 0 - если данные одинаковы, 1 - иначе.
memset - инициализация области памяти определённым значением
var memset(var dest, var c, var n)
- параметр var dest - область памяти, которая будет заполнена
- параметр var c - значение, которым будет происходить заполнение
- параметр var n - количество байт
- возвращаемое значение: количество байт
stoi - считать значение из памяти согласно формату. Функция используется для обработки полученных текстовых сообщений.
var stoi(var s1, var fmt)
- параметр var s1 - адрес памяти для чтения
- параметр var fmt - строка формата
- возвращаемое значение: число.
Формат fmt
d - считать число в десятичном формате. поиск закончится на первом символе, не являющимся числом, или когда будет считано максимально допустимое количество знаков (10 для 32х битных чисел)
x - считать число в шестнадцатеричном формате. поиск закончится на первом символе, не являющимся шестнадцатеричным, когда будет считано максимально допустимое количество знаков (8 для 32х битных чисел)
p - считать число в бинарном формате. размер и порядок байт зависит от платформы. любые другие варианты невалидны и приведут в к возврату значения 0.
sprintf - поместить данные в память согласно формату Данная функция позволяет структурировать данные согласно строке форматирования и отправить на указанный адрес (регистр периферии или область памяти).
var sprintf(var dest, literal fmt, …)
- параметр var dest - адрес памяти, куда будет помещён результат.
- параметр fmt - строка форматирования (литерал).
- возвращаемое значение: количество записанных байт.
Коды форматирования:
%d - то же самое, что и %u
%c - целочисленный аргумент преобразуется в символ с соответствующим ASCII кодом.
%s - символы из памяти, на которую указывает аргумент, или (если аргумент является литералом) содержимое литерала копируется в память как есть. Копирование останавливается на первом нулевом символе.
%p - целочисленный аргумент записывается в память как бинарное число (4 байта, little endiann).
%r - (используются два аргумента). Символы из памяти, на которую указывает первый аргумент, копируются в память. Количество скопированных символов определяется вторым аргументом.
contains - проверка вхождения Проверка вхождения числа
var contains(array, var value)
- параметр array - статический массив чисел
- параметр var value - значение, которое будет искаться в массиве
- возвращаемое значение: 1, если массив имеет вхождение данного числа, 0 - если нет.
Проверка вхождения литерала
var contains(array, literal, var size)
- параметр array - статический массив литералов.
- параметр var size - количество сравниваемых первых символов литерала.
- возвращаемое значение: 1, если массив имеет вхождение данного числа, 0 - если нет.
Проверка вхождения произвольного участка памяти
var contains(array, var ptr, var size)
- параметр array - статический массив литералов
- параметр var ptr - указатель на область памяти с искомыми данными
- параметр var size - количество сравниваемых первых символов.
- возвращаемое значение: 1, если массив имеет вхождение данного числа, 0 - если нет.
Пример:
Предположим, что определен массив var FRUITS = [“apple”, “orange”, “plum”]; в начале оперативной памяти (по адресу SYS.RAM) лежит “blueberry”, а по адресу SYS.RAM + 42 лежит “orange” Тогда:
contains(FRUITS, SYS.RAM, 9) == 0
contains(FRUITS, SYS.RAM + 42, 6) == 1
Вхождение можно проверять с помощью условия if следующим образом:
if(42 in ANSWERS){...}.
delay - пауза
Останавливает выполнение программы виртуальной машины на указанный промежуток времени (по-умолчанию в мс). Активная пауза может быть удалена командой wake из прерывания.
var delay(var ms)
- параметр var ms - время ожидания (в миллисекундах)
- возвращаемое значение: ms
resume - снятие паузы
Отменяет текущий delay.
var resume()
- возвращаемое значение: 0
sleep - сон
Отправляет контроллер в спящий режим на заданное время (по-умолчанию в мс).
var sleep(var ms)
- параметр var ms - время сна (в миллисекундах)
- возвращаемое значение: ms
sizeof - выдать размер переменной
var sizeof(var)
- возвращаемое значение: размер размера переменной (var) для текущей платформы (обычно 4).