7.1 StdLib

memcpy - копирование области памяти

var memcpy(var dest, var src, var n)

memcmp - сравнение области памяти

var memcmp(var s1, var s2, var n)

Варианты функции:

var memcmp(var s1, literal, var n)

memset - инициализация области памяти определённым значением

var memset(var dest, var c, var n)

stoi - считать значение из памяти согласно формату. Функция используется для обработки полученных текстовых сообщений.

var stoi(var s1, var fmt)

Формат fmt

c - считать один символ (байт) и вернуть как число.
d - считать число в десятичном формате. поиск закончится на первом символе, не являющимся числом, или когда будет считано максимально допустимое количество знаков (10 для 32х битных чисел)
x - считать число в шестнадцатеричном формате. поиск закончится на первом символе, не являющимся шестнадцатеричным, когда будет считано максимально допустимое количество знаков (8 для 32х битных чисел)
p - считать число в бинарном формате. размер и порядок байт зависит от платформы. любые другие варианты невалидны и приведут в к возврату значения 0.

sprintf - поместить данные в память согласно формату Данная функция позволяет структурировать данные согласно строке форматирования и отправить на указанный адрес (регистр периферии или область памяти).

var sprintf(var dest, literal fmt, …)

Коды форматирования:

%b, %o, %u, %x - целочисленный аргумент преобразуется в строку в беззнаковом бинарном представлении (b), беззнаковом восьмеричном представлении (o), беззнаковом десятичном представлении (u) или беззнаковом шестнадцатеричном представлении (x).
%d - то же самое, что и %u
%c - целочисленный аргумент преобразуется в символ с соответствующим ASCII кодом.
%s - символы из памяти, на которую указывает аргумент, или (если аргумент является литералом) содержимое литерала копируется в память как есть. Копирование останавливается на первом нулевом символе.
%p - целочисленный аргумент записывается в память как бинарное число (4 байта, little endiann).
%r - (используются два аргумента). Символы из памяти, на которую указывает первый аргумент, копируются в память. Количество скопированных символов определяется вторым аргументом.

contains - проверка вхождения Проверка вхождения числа

var contains(array, var value)

Проверка вхождения литерала

var contains(array, literal, var size)

Проверка вхождения произвольного участка памяти

var contains(array, var ptr, var size)

Пример:

Предположим, что определен массив 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)

resume - снятие паузы

Отменяет текущий delay.

var resume()

sleep - сон

Отправляет контроллер в спящий режим на заданное время (по-умолчанию в мс).

var sleep(var ms)

sizeof - выдать размер переменной

var sizeof(var)