QNX.ORG.RU

Установка и настройка => Программное обеспечение => Тема начата: da-nie от Апреля 06, 2019, 05:45:08 pm



Название: Запускаем платы CAN под QNX.
Отправлено: da-nie от Апреля 06, 2019, 05:45:08 pm
Запустил под QNX плату CAN Adlink PCI-7841. Может быть, кому-нибудь пригодится.
Программа для работы с платой PCI-7841 (репозиторий будет обновляться). (https://github.com/da-nie/CAN7841)

За основу взят драйвер для Linux. Все магические числа успешно сохранены (я всё равно не в курсе, что большая часть из них значит).
Как драйвер оформлять не стал - лет 15 назад я такую глупость сделал для платы CAN527D (драйвер физического CAN->драйвер виртуального CAN (чтобы много устройств работало одновременно с одним CAN)->драйвер работы с устройством->основная программа) и наелся с задержками (у меня счёт на части миллисекунды идёт - относительно плотный обмен) и необходимостью следить за соединением с драйвером (вдруг он уже упал).

В данный момент осталось понять, как детектировать Buss-off и что после него сделать для восстановления канала (на CAN527D я полностью переинициализирую канал).


Название: Re: Запускаем платы CAN под QNX.
Отправлено: da-nie от Апреля 22, 2019, 08:01:59 pm
Вот ещё программа для работы с платой CAN527D. (https://github.com/da-nie/CAN527D) Так же как драйвер не оформлялась.


Название: Re: Запускаем платы CAN под QNX.
Отправлено: da-nie от Июля 31, 2019, 08:02:09 pm
Странно. Сегодня попался компьютер (на i3), на котором программа для pci7841 весело зависает намертво вместе с системой при завершении программы по сигналу или при вызове функции Init повторно. Ни на одном другом компьютере такого не было никогда! В попытках понять, что происходит, удалось обнаружить, что зависание возникает при вызове функции StopThread. Но вся штука в том, что зависает захват мютекса в классе RAII для работы с мютексом. Я в полном недоумении. :( Если пропустить настройку каналов в инициализации, то зависания не происходит. Что от этого меняется-то?  >:( Прерывания не приходят? Но я полностью отключал поток обработки прерываний (вместе с InterruptAttachEvent) - зависает также на ура. И главное, я не понимаю, чем занимается в это время процессор. Такое впечатление, что система застревает в каком-то своём ISR (моего-то нет - InterruptAttachEvent), откуда не выходит. Странно ещё и то, что если убрать InterruptUnmask, то намертво отваливается USB-клавиатура, но мышка PS/2 живёт, как и вся остальная система. Уж не поделила ли QNX линию прерывания платы PCI7841 с другими устройствами и что-то работает неверно, вот и виснет?  ::)


Название: Re: Запускаем платы CAN под QNX.
Отправлено: da-nie от Августа 01, 2019, 06:47:13 pm
Интересная штука. Оказывается, всё дело в этих самых прерываниях. Плате обязательно нужно их запретить до завершения работы с ней и шиной PCI. Похоже, если у неё не сбросить флаг прерывания, считав регистр прерываний, она начинает генерировать прерывания непрерывно, чем загоняет QNX до зависания. А не натыкался я на такое, потому что система работала как запрос-ответ и сама формировала запрос. Как только я стал ловить приходящий траффик, тут всё и повисало намертво.