crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику JohnZ ::: Спасибо сказали: 10 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
17.11.2017, 12:04 Есть-ли здесь СПЕЦЫ ?
Цитата(Алексей1153 @ 15.11.2017, 8:29) *
JohnZ, не задумывался об этом, меня устраивает поток на 100%

А вотЪ если подумать над этим, то можно _тратить_ ресурсов на _порядок_ (а то и два) меньше, при схеме с прерываниями B)
Хорошо если этот поток "упадёт" на свободное ядро, и если это доп-е ядро в проце есть, - а если нет !?

Цитата(Iron Bug @ 15.11.2017, 11:51) *
я тебе ещё раз говорю: почитай хотя бы основы про систему, под которую ты собрался что-то писать.
последний раз, когда прерывания были доступны юзеру - это времена MS-DOS. с тех пор системы стали сложнее и драйвер в принципе не обязан ничего предоставлять юзеру.

Тогда нафига козе баян ? Ось ради оси ? Где логика ? Откройте определение и лог-й состав оси, хотя-бы даже с тех-же
времён MS-DOS ?! Разве во времёна Линь/Вынь изменилось её назначение / определение ?!
Если да, то опять на ум приходит вопрос про козу с баяном :)
И почему-это "драйвер в принципе не обязан ничего предоставлять юзеру" ??? Тогда вопрос - зачем он нужен ?
Под юзером здесь ес-сно подразумевается Пользовательское ПО !!!

Цитата
конечно, ты можешь написать свой драйвер, но это довольно сложная задача и главное, что это в принципе не нужно. потому что драйвер как раз предоставляет интерфейсы для libusb и всяких там HID интерфейсов и юзерский софт пользуется стандартизированными интерфейсами библиотек, а не затачивается под разные драйвера. на самом деле, с драйверами всё несколько сложнее, их там несколько уровней и они передают между собой сообщения. но то, о чём ты говоришь, доступно только драйверам самого низкого уровня и они точно ничего о прерываниях юзеру не сообщают. это загрузило бы ядро системы ненужными коллбеками вплоть до полного зависания.

Я в курсе что "это довольно сложная задача", поэтому и спрашиваю.
Я как-раз и хочу "вцепиться" в драйвер самого низкого уровня ! Ему-же без разницы кому отдать эвент ?!
К большому сожалению libusb этого НЕ делает, а должна была-бы ...

Цитата(Iron Bug @ 15.11.2017, 17:52) *
я, честно говоря, не видела USB-шных девайсов на майкрочипе. чаще всего там FTDI ставят. дёшево и сердито.

Вот именно ! Дёшево и сердито. !!! FTDI полностью обслуживает интерфейс и имеет физическую линию IRQ !
Я о том и спрашиваю - как его (IRQ) достать !!! Тогда можно было-бы "доточить" libusb ...
Скачал я описание проца RPi2 ( BCM2835 ), буду разбираться с его "мухами" :(

Цитата(Iron Bug @ 16.11.2017, 13:53) *
Цитата(Алексей1153 @ 16.11.2017, 9:34)
А по поводу FTDI - тоже используем. Он непредсказуемо затыкается на win7 и младше, на 8 и 10 вроде стабильно работает
вот ни разу такого не видела. там, главное, использовать правильный драйвер: не серийный, который эмулирует COM, а нормальный D2XX, который управляет регистрами железяки напрямую. мы использовали их в промышленной автоматике в очень нагруженных системах и ни разу ничего не затыкалось.

Ну вот-же, есть нормальные дрова ! И видимо из юзер-моде доступен ?!
А что это за звЯрушка такая, - D2XX ?
9or6UxhWRa1, gHzcXItj3a1, hxr3Wawd9g1,
14.11.2017, 11:53 Есть-ли здесь СПЕЦЫ ?
Для потока и LibUSB у меня тоже реализовано, но некузяво это, при наличии аппаратного IRQ.
В том-то и вопрос, как выцарапать это IRQ у системы ?!
Где и как сказать драйверу что-бы он отдал конкретный EVENT моей Call-Back-чной ф-ции ?
Пишу под ARM на Linux (RPi-2) ...
9or6UxhWRa1,
13.11.2017, 13:40 Есть-ли здесь СПЕЦЫ ?
Пытаюсь написать универсальные "дрова" для USB сканера ШК.
Универсальные в том смысле что под Lin/Win и с учётом разновидности протоколов самих ШК (USB-COM / KB)
Всё что перерыл - работает в основном на тредах, и даже не "подозревает" о аппаратных прерываниях :blink:
Было уже обрадовался увидев в LibUSB вызов
    libusb_fill_interrupt_transfer ( irq_transfer, devh, EP_INTR, irqbuf, sizeof(irqbuf), cb_irq, NULL, 0 );

но как оказалось её реализация организует свой "внутренний" тред для раздачи event-ов и опроса устр-в ...
... поэтому call-back - чная ф-ция у меня не вызывалась.

На обслуживание (и перехват) USB прерываний у гугля почему-то затык, или я его неправильно спрашивалЪ ... :unsure:

Что нужно ? В пространстве пользователя ( т е в ПО ) "сесть" на НУЖНОЕ прерывание и формировать
сигналы с принятым и расшифрованным кодом ШК из call-back - чной ф-ции. (как в DOS-e для COM-Port )
Расшифровывать ШК нужно т к разные сканеры по разному его формируют ...

Кто в курсе, подскажите куда копать ?! Буду премного благодарен за ссылки и примеры.
97WzugSKd31, 9or6UxhWRa1, DaLgAMYeVr1, gHzcXItj3a1, hxr3Wawd9g1,
1.9.2014, 16:29 Динамический UI
Ок.

1. Работают они почти одинаково, есть небольшая разница во времени появления построенного диалога на
экране, QUiLoader чуть медленнее, но это субъективно, за-то ему нужно меньше памяти, т.к. его модуль меньше.

2. В случае, если пишете свой "Дизайнер", предпочтительнее использовать QFormBuilder, т.к. в "довесок"
к нему в модуле QT-шного Дизайнера идут класы доступа к элементам Дизайнера QT.
С ними я пока не работал, т.к. свою проблему буду решать другим способом, через "фиксированные"
алиасные имена и реализацией класса который об этих именах осведомлён :-)

3. В проектируемом диалоге формы элементы "получают" алиасные имена из конфигурации.
Подробнее о проекте в ветке "Поиск и выбор узла в QTreeView".

4. Вот реально работающий код, для просмотра формы. Загрузка из QString ...
     QString sCode;
     QModelIndex index = selectedIndexes().first();
     DomItem *item = static_cast<DomItem*>(index.internalPointer());
     sCode = item->node().toElement().text();
     QUiLoader fLoader;

     QByteArray ba = sCode.toUtf8();
     QBuffer buf(&ba);
     fpForm *Form = (fpForm *)  fLoader.load(&buf, this);
     buf.close();
     Form->initForm(sCode);

//    Form->exec();       // По вкусу :-)
      Form->show();
      return;
Litkevich Yuriy,

RSS Текстовая версия Сейчас: 25.4.2024, 10:26