Перейти к содержанию
    

kernel32ddl

Свой
  • Постов

    44
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные kernel32ddl


  1. Если вышенаписанное - правда...

    АТВЕЧАЮ, ВАСЯ! (с) Жорик Вартанов

     

    А если серьезно, то считаю возможность внутрисхемной отладки несомненным плюсом, скажу больше, для некоторых задач это просто жизненно необходимо. Другое дело что для тех задач которые я хочу осуществить с ATMegой - поиграться со светодиодами, кнопочками - особой нужды нет. Да и как я понял внутрисхемный отладчик будет стоит не дешево.

  2. Немного путаете. Отладчик позволяет отлаживать, т.е. запускать программу и иметь возможность пошагового исполнения, чтения/записи регистров и т.д. Отладчик может выполнять функции программатора. В качестве программатора байт-бластер использовать можно, в качестве отладчика - нет. И программировать в этом случае придется не напрямую из ИАРа или студии, а запуская промежуточную программу (AVReal).

    Отлично, теперь все стало ясно. Т.е. в IAR как я понял можно скомпилировапть hex файл программы написанной на "С" для заливки в контроллер, который потом шьется AVRealом через BB?

  3. В свое время приходилось много писать на "С" для DSP TMS. Для этого пользовался средой Code Composer Studio, которая являлась одновременно и компилятором и отладчиком для данного процесссора при подключении оного через JTAG.

    А есть ли аналогичная среда для контроллера ATMega8 и JTAG ByteBlaster? Откуда можно скачать если есть?

  4. Доброго времени суток!

    Имеется необходимость "ручной" установки библиотеки libusb. Ручная в кавычках, т.к. хочу производить установку данной библиотеки не при помощи её родного визарда, а при помощи своей программы, в тихоря, так сказать, от пользователя.

    Из просмотра исходных текстов понял только то, что необходимо скопировать файл libusb0.dll в папку SYSTEM32, а libusb0.sys в SYSTEM32\DRIVERS. Прекрасно понимаю, что этого не достаточно :) , какие еще действия необходимо произвести, наверняка надо править реестр? Кроме того хотелось бы, чтобы драйвер библиотеки подцеплялся только к моему устройству, причем динамически, а не ко всему в системе что имеет приставку USB (как это делает виззард).

  5. Ну и правильно IoCreateSymbolicLink ругается. Объекта-то с devName в системе-то нету.

    Попробуйте в IoCreateDevice вместо NULL указать требуемый DevName, флажок FILE_AUTOGENERATED_DEVICE_NAME не указывать. Я не уверен, что этот devObj потом

    можно использовать как фильтровый - то есть с стеку он скорее всего из-за именованности не приаттачится. То есть Вам придется создать именованный devObj и обычный неименованный filterDevObj. filterDevObj включить в стек и работать как обычно фильтром, а на devObj уже принимать дополнительные запросы на обработку сверху.

    Ясно, спасибо, буду разбираться!

  6. Сначала делаю так:

    RtlInitUnicodeString( &devName, L"\\Device\\BIOFILTER" );
    status = IoCreateDevice(    driverObj, 
                                    sizeof(struct DEVICE_EXTENSION),
                                    NULL,
                                    //&devName,         // name for this device
                                    FILE_DEVICE_UNKNOWN, 
                                    FILE_AUTOGENERATED_DEVICE_NAME,// device characteristics
                                    (BOOLEAN) FALSE,    // not exclusive
                                    &filterDevObj);        // our device object

    А затем так:

    RtlInitUnicodeString( &symLinkName, L"\\DosDevices\\BIOFILTER" );
    status = IoCreateSymbolicLink(&symLinkName, &devName);

    Потом так:

            /*
             *  Initialize device extension for new device object
             */
            devExt = (struct DEVICE_EXTENSION *)filterDevObj->DeviceExtension;
            RtlZeroMemory(devExt, sizeof(struct DEVICE_EXTENSION));
            devExt->signature = DEVICE_EXTENSION_SIGNATURE;
            devExt->state = STATE_INITIALIZED;
            devExt->filterDevObj = filterDevObj;
            devExt->physicalDevObj = physicalDevObj;
            
            devExt->pendingActionCount = 0;
            KeInitializeEvent(&devExt->removeEvent, NotificationEvent, FALSE);
    #ifdef HANDLE_DEVICE_USAGE
            KeInitializeEvent(&devExt->deviceUsageNotificationEvent, SynchronizationEvent, TRUE);
    #endif // HANDLE_DEVICE_USAGE
            devExt->topDevObj = IoAttachDeviceToDeviceStack(filterDevObj, physicalDevObj);

  7. Возникла необходимость расширить набор команд для USB флэшки.

    Ситуация следующая.

    Имеется USB флэшка собственного изготовления. Помимо стандартных Mass Storage команд необходимо добавить свою, предназначенную для служебных целей (прием изображения с сенсора отпечатка пальца).

    По началу использовали очень простое решение - открывали флэшку как файл и осуществляли запись и чтение (т.е прямое обращение к диску) через избыточные сектора на ней (я специально подобрал кол-во секторов во флэши чтобы при форматировании оставалось 3 избыточных сектора).

    В WinXP данное решение более-менее прокатывало, а вот в Win2k начались серьезные глюки. Win2k по умолчанию использует механизм отложенный записи, который нам не удалось отключить, и из-за этого при приеме/передачи служебных данный(чтении/записи нашего избыточного сектора) происходили огромные задержки которые сделали практически невозможной работу с устройством.

    Затем появилась мысль написать свой собственный драйвер-фильтр для флэшки, который бы просто пропускал все стандартные запросы вниз по стеку и умел бы обрабатывать пару моих IOCTL для приема/передачи данных.

    Почитал Солдатова, Сорокину, Агурова и принялся за дело. Взял /src/wdm/usb/filter (из DDK).

    Посчитал, что достаточно будет создать символическую ссылку на драйвер, добавить обработку своих IOCTL и при помощи CreateFile и DeviceIoControl "общаться" со своим устройством.

    Однако при попытке создания символической ссылки на драйвер при помощи функции IoCreateSymbolicLink происходила ошибка.

    В описании на данную функцию в DDK я обнаружил, что она не предназначена для использования в WDM драйверах и в драйверах фильтрах в частности, и что необходимо для этих целей использовать функцию IoRegisterDeviceInterface. Для данной функции я так и не смог найти более менее понятного примера использования.

     

    Так вот, возникает вопрос, каким образом можно решить данную задачу, и вообще обязательно ли писать свой драйвер для этих целей? Нужно ли писать именно драйвер фильтр или же можно написать “легаси” драйвер или класс драйвер (в котором можно использовать IoCreateSymbolicLink) и подключить его к драйверу шины “в параллель” с USBSTOR.SYS? Или же каким-нибудь образом обращаться из user mode к существующему драйверу в системе, например, USBSTOR.SYS или драйверу хаба для приема/передачи данных с/на устройство?

  8. Все-таки решил отказаться от данной команды. Буду делать внутреннюю проверку на битость и потом просто подменять адрес если будет производиться запись в битый сектор, таким образом можно значительно продлить ресурс флэши и не пугать пользователя присутствием битых секторов на "нулевом" устройстве.

    Из проверенных мною имеющихся флэшек, на 3 256М-байтных была одна битая страница(128 кбайт), 128М-байтных на одной из трех.

  9. Необходимо осуществить проверку на битость секторов USB Flash памяти.

    Я так понимаю в наборе Mass Storage команд для этого есть команда VERIFY (0x2F), в параметрах которой есть 2 параметра: адрес логического блока (LBA) и количество блоков для проверки.

    Она должна возвращать ОК в случае удачной проверки секторов и FAILE в противном случае.

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

    В моем устройстве на данный момент в ответ на эту команду всегда отправляется ОК. В спецификации на SCSI команды, я так и не смог найти внятного ответа на данный вопрос. Есть небольшой абзац, в котором написано, что-то вроде "если вы хотите передать список битых секторов вы должны сохранить его в странице списка...", вобщем я ничего из этого не разобраз.

    Если кто-нибудь занимался данной проблемой подскажите :help: , времени на разбирательство нет - сроки очень поджимают.

  10. Как один из вариантов - команда чтения или записи с фиксированным номером сектора, лежащим далеко за пределами объявленного размера устройства.

    Как вариант я данную возможность рассматривал, вот только вопрос в том, как винда отнесется к прямому обращению к диску?

    По идее как раз для таких задач существуют драйвера - фильтры. Сам я не пробовал - посмотрите в DDK. Теоретически если подставить фильтр под class driver'ом можно будет делать с обменом что угодно.

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

     

    Большое спасибо за помощь! Попробую осуществить первый вариант.

  11. Возникла следующая проблема:

    Необходимо добавить в набор Mass Storage команд свою служебную команду. Со стороны устройства нет никаких проблем, очень легко можно запрограммировать его на обработку дополнительной команды. Вопрос в том как можно будет отправить данную команду на устройство из-под винды (из свой программы)?

    Возможно ли каким-то образом "подключиться" к Mass Storage драйверу и втиснуть свою команду в стандартный обмен драйвера с устройством?

  12. Открыл создал счетчик а как его добавить в схему в виде символа

    Не знаю. Я никогда не пользовался графическим вводом. Только языковое описание. Чего и вам желаю.

    "New Source", в открывшемся окошке выбрать "IP (Coregen & Architecture Wisard)", галка add to project должна стоять, ввести имя только строчнымибуквами итд.

    Что-то нет у меня токого наверное потому что Webpak. Подскажите серийник для faundation 8.1

    Нашел и добавил. Спасибо. Извиняюсь за столь примитивные вопросы но я только начинаю разбираться с ПЛИС и в частности с ISE. Может кто подскажет где в инете есть литература по нему.

     

    Что-то нет у меня токого наверное потому что Webpak. Подскажите серийник для faundation 8.1

    Серийник от 8.1 утерян. У меня щас 8.2.

    Кореген генерит кучу файлов с разными расширениями и вами заданным именем. Сделайте "Add Source" и добавьте файл *.xco, если вебпак это не сожрёт, тогда add source файл *.v (если верилог) или *.vhd (если вхдл). При этом в папке проекта должен быть файл с таким-же именем *.edn, он нужен для PAR'а.

    Спасибо. Жаль конечно просто на работе инет медленный сервиспак хер выкачаешь.

  13. Открыл создал счетчик а как его добавить в схему в виде символа

    Не знаю. Я никогда не пользовался графическим вводом. Только языковое описание. Чего и вам желаю.

    "New Source", в открывшемся окошке выбрать "IP (Coregen & Architecture Wisard)", галка add to project должна стоять, ввести имя только строчнымибуквами итд.

    Что-то нет у меня токого наверное потому что Webpak. Подскажите серийник для faundation 8.1

×
×
  • Создать...