Перевести страницу

Создание приложений для науки и производства ещё не было таким простым

Приём и передача данных процессором Ci

Эти операции добавляются в язык вместе с процессором, который используется на схеме для выполнения Ci-программ.


send

Формат вызова:

    send  <parameter0> <parameter1> [<parameter2>...<parameter31>];

первый параметр типа str или типа uint, допустим любой операнд, массив не допустим;

второй и следующие параметры любого типа, допустимы любые операнды, массивы допустимы

назначение операции: на выход с именем или порядковым номером (от 0), получаемым в первом параметре, передаются все последующие параметры, независимо от их типов; массивы передаются поэлементно, начиная с 0-го элемента; ВАЖНО! у процессора Ci, в программе которого используется эта операция, должен иметься выход с именем или номером, точно совпадающим с передаваемым в первом параметре, если такой выход отсутствует, то программа будет остановлена с сообщением об ошибке; примеры использования:

    send "Сигнал" TRUE "данные переданы"; ``передаст логическое TRUE и строку "данные переданы" на выход "Сигнал", если такой имеется

    str a[3];

    data a "Привет", "мир", "!";

    send 0 (sizeof a) a; ``передаст на самый верхний выход процессора Ci число 3, затем содержимое массива a


hasdata

Формат вызова:

    (hasdata)

возвращает bool;

параметров нет;

назначение операции: возвращает TRUE, если по какому-либо входу есть данные; для получения номера входа, на котором есть данные, надо их получить с помощью операции getinput; пример использования:

    str d;

    if (hasdata)

    {

        puts "получена строка на входе номер:" (getinput s) "с содержимым:" s;

    }


getinput

Формат вызова:

    getinput <parameter0> [<parameter1>];

    (getinput <parameter0> [<parameter1>])

возвращает uint, возвращаемое значение можно игнорировать;

первый параметр типа bool, int, uint, float или str, обязательно переменная, массив не допустим;

второй параметр может отсутствовать, типа типа str, обязательно переменная, массив не допустим;

назначение операции: если на каком-либо входе есть принятое данное, то получает его и записывает в переменную, полученную первым параметром, при этом если тип полученного данного не совпадает с типом переменной, то производится попытка конвертировать данное, если она не удалась, то программа останавливается с сообщением об ошибке; если операция вызвана, но данных ни на одном из входов нет, то программа останавливается в ожидании получения данных, чтобы этого не происходило, нужно проверять наличие принятых данных с помощью операции hasdata; если операция используется со вторым параметром, то в него записывается имя отправителя; пример использования:

    str s;

    int i;

    float f;

    getinput i s;

    puts "получено целое число" i "от отправителя" s;

    i = (getinput f);

    puts "получено вещественное число" f "на входе" i;


oninput

Формат вызова:

    oniput <parameter0> [<parameter1>];

первый параметр типа str или uint, допустим любой операнд, массив не допустим;

второй параметр, если присутствует, то типа block, допустим любой операнд, массив не допустим;

назначение операции: если используется с двумя параметрами, то устанавливает для входа с именем или порядковым номером, указанным первым параметром, блок программы, который указывается вторым параметром, и который будет вызван при получении сигнала по установленому входу; функционально это аналогично установке обработчика прерывания, поскольку текущее выполнение программы сразу при получении сигнала будет прервано (текущая выполняемая операция будет завершена, и после этого произойдет прерывание) и будет выполнен установленный блок, после чего выполнение прерванной программы будет продолжено; обработка по прерыванию удобна в тех случаях, когда надо циклически выполнять какие-то действия, но сразу же обрабатывать приходящие данные, без проверки и ожидания; допускается установка нового блока обработки прерывания внутри блока обработки прерывания даже для того же входа - но надо иметь в виду, что при следующем прерывании будет вызываться блок, установленный последним, восстановление обработчика прерывания не происходит; если операция вызывана с одним параметром, то происходит отключение ранее установленного обработчика для указанного в первом параметре входа; если в первом параметре указан отсутствующий вход, то выполнение программы будет прекращено с сообщением об ошибке; примеры использования:

    str s;

    bool p;

    oninput "Сигнал"

    {

        getinput s;

        p = TRUE;

    };

    loop ``ожидание данного и вывод времени через каждую секунду

    {

        delay 1000;

        if p

        {

            puts "получена строка" s;

        } `else` {

            puts (time)

        };

        breakif p;

    };

    oninput "Сигнал"; `` обработка сигнала отключена