Передача данных от устройства приложению.

Тема в разделе "WASM.NT.KERNEL", создана пользователем Quark, 3 май 2008.

  1. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Вобщем мой драйвер получает данные и по мере их появления должен отдавать их апликухе. У меня есть несколько идей как это можно сделать:

    1) драйвер по мере получения данных собирает их в список и ждёт пока апликуха постучится и заберёт их.. это плохо - во-первых использование памяти ядра, во-вторых апликуха может вообще никогда не постучаться и список очень сильно вырастет.
    2) Использование разделяемой памяти (секция в адресном пространстве апликухи). Тут нужно будет, наверное, создать событие и по нему апликуха будет знать о появлении новых данных. Этот способ мне тоже не очень нравится. потому как данные от устроуства могут приходить быстрее чем апликуха сможет их обрабатывать. Можно, конечно, увеличивать размер секции если апликаха не успевает их читать и сделать что-то по типу циклического стека...

    Какие есть ещё вырианты?
     
  2. Novi4ek

    Novi4ek New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    317
    2) Еще из минусов на мой дилетантский взгляд - привязка драйвера к приложению.

    а так имхо смотря что за данные. Если они некритичные, то можно использовать статический переписываемый буфер (ну или как-то другим образом устроенная память статического размера) - если никто не успел забрать оттуда дату - она просто затирается новой.
     
  3. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Ну привязки, пожалуй, не будет.. просто апликуха вызыват DeviceCotrol, драйвер создаёт в её адресном пространстве секцию и возвращает адрес. Основная проблемма - события правильно расставить да блокировку памяти чтобы юзер с ней ничего сделать не мог кроме как читать да и то только тогда, когда драйвер туда ничего не пишет...