KolibriOS на производстве

Using Kolibri in embedded systems
  • На качественно организованном производстве
    переходник RS232/RS485 встречается не реже,
    чем персональный компьютер.
    Операционные системы приходят и уходят, а последовательный
    порт почему-то остаётся.
    Следующей идеей у меня было -
    подцепить какой-нть RS-485 девайс
    (в том же ключе, как на LPTе - светодиоды).
    Last edited by VitZ on Sun Jul 28, 2013 4:39 pm, edited 3 times in total.
  • Устройство двоичного вывода (0 - 24 В) i7042
    попытаемся подключить к $3F0 - адресу
    на скорости 115200, с 8мью битами данных,
    без проверки на чётность и с минимальным количеством стоповых битов.
    Last edited by VitZ on Fri Jul 05, 2013 11:41 am, edited 5 times in total.
  • VitZ wrote:Устройство двоичного вывода (0 - 24 В)
    не забудь про гальваническую развязку - у COM-порта (-12В ... +12В)
  • У меня на ноуте до 5В, так что это еще стоит вольтметром проверить.
  • Устройство i7042 подключаем к компу через переходник i7520;
    если (как у меня получалось раньше - из DOS'а) удастся послать
    в пром-линию через com-порт строку '$01M',
    то устройство (в данном случае i7042)
    пришлёт своё имя (i7042 в данном случае
    должно иметь в пром-линии адрес 01 и
    настройку на скорость 115200) ...
    Last edited by VitZ on Sun Nov 02, 2014 2:23 pm, edited 5 times in total.
  • ... в конце каждой строки
    общения между устройствами
    (комп <-> i7042)
    ставится символ (байт) 13.
  • В примере с LPT-светодиодами
    две процедуры (p3 и p4) можно
    свернуть в одну (по записываемому байту):

    procedure zapis_v_port(b:byte);
    begin asm
    mov eax,43
    mov bl,b
    mov ecx,888
    int $40
    end; end;

    Скорее всего и номер (адрес)
    порта тоже можно вынести -
    как параметр.
    Last edited by VitZ on Sun Jun 02, 2013 7:25 am, edited 1 time in total.
  • Конечно, можно.
  • У меня получилось:

    procedure zapis_v_port(pb1, pb2, b: byte);
    begin asm
    mov eax, 43
    mov bl,b
    mov ch, pb1
    mov cl, pb2
    int $40;
    end; end;
    ...
    if key=7 then zapis_v_port($3, $78, 255);
    if key=8 then zapis_v_port($3, $78, 0);

    , а как в ассемблере записать в регистр (ecx) для номера
    порта сразу 2а байта=word (888>255)
    (может какие-то квадратные скобочки рядом с ecx использовать
    или адрес этой переменной и указать количество её байт) ?
  • VitZ
    Размерность регистра и операнда должны совпадать для команды mov.
    Если хочешь записать именно word в ecx можешь воспользоваться к примеру командой movzx.
    Не пиши никогда идентификаторы, комментарии и т.д. транслитом, используй английский язык.
    Это вроде как Pascal с BASM'ом?
    Вместо кучи однотипных if лучше использовать конструкцию case of.
  • Asper, спасибо ...

    procedure zapis_v_port(pdw:dword; b:byte);
    begin asm
    mov eax,43
    mov bl,b
    mov ecx,pdw
    int $40
    end; end;
    ...
    if key=7 then zapis_v_port(888,255);
    if key=8 then zapis_v_port(888,0);

    ... а транслитом я уже
    больше думаю, чем пишу.
    Last edited by VitZ on Mon Aug 26, 2013 8:13 pm, edited 1 time in total.
  • Драйвер нашего com-порта
    будет содержать 8 процедур:
    zachvat_portov, otdatj_porti, open_com,
    zapis_v_port(pdw,b), chtenie_iz_porta(pdw,b), delay(ms),
    sc(s1), rc(s2).
    Последние две - это:
    послать команду в com-порт (строка) и
    принять команду из com-порта (строка) соответственно.
    Last edited by VitZ on Sun Jun 02, 2013 7:50 pm, edited 1 time in total.
  • : Зачвать портов! Отдатж порти!
    Может, всё же лучше grab_ports/capture_ports и release_ports?
  • Я предлагаю перенумеровать через randomize все 8 процедур
    и продолжить написание кода драйвера по-сути;
    например:
    p9358765,
    p2089764,
    ...
    p7848933.
    (Естественно, надо будет проверить -
    чтобы не было двух совпадающих имён) :)
  • Who is online

    Users browsing this forum: No registered users and 2 guests