На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
Страницы: (51) « Первая ... 38 39 [40] 41 42 ...  50 51  ( Перейти к последнему сообщению )  
> Желающим USB под ДОС , Welcome!!!
    Цитата StasNewOs @
    Ну не знаю, а если например при работающих QH добавить ещё QH, то куда её лучше ставить в перёд или назад

    Эмм.. где у кольцевого списка перед и зад? Можно ставить ставить куда угодно, главное придерживаться рекомендованного алгоритма вставки (insert), все есть в даташите.
    Цитата StasNewOs @
    если удалить QH а соседние в это время работают, ничего страшного не случится?

    Если следовать алгоритмам, приведенным в даташите, то нишего не случится - инфа 100%.
    Сообщение отредактировано: shm -
      Ну да, он же кольцевой, т.е. у последнего есть адрес на первый, но в контроллере есть адрес на первый, т.е. первый всё таки есть.
      Сообщение отредактировано: StasNewOs -
        Цитата StasNewOs @
        но в контроллере есть адрес на первый

        В контроллере есть адрес текущего QH и не более. Есть т.н. головной QH с установленным битом H ( но это не позволяет его называть "передом, а до него все "задом" т.к. смысл несколько иной), ЕМНИП, то контроллер проходит по всей очереди и если не находит активного QH, то останавливает перед ним на фрейм (правда тут могу ошибаться т.к. нету даташита под рукой).
        Сообщение отредактировано: shm -
          Впринципи удалив QH из кольца остальные QH не меняются, но в этот момент нужно, чтобы контроллер стоял или не обязательно.
            Цитата StasNewOs @
            не обязательно.

            Не обязательно, загляни в даташит.
              Ну ты б тогда хоть параграф или главу подсказал бы где смотреть, если жалко такую инфу выдавать.
                Раздел 4 я бы рекомендовал вдумчиво прочесть целиком. Главы 4.8 и 4.10 рекомендую прочесть особенно внимательно.
                Сообщение отредактировано: shm -
                  Понял спасибо.
                    Цитата shm @
                    Кстати, вот по поводу "автоматического" разбиения всех данных по размеру КТ передаваемых через TD, тут есть интересный нюанс с контролем триггера данных, я по привычке (UHCI) после каждого TD инвертировал его и, когда стал передавать нечто большее размера конечно точки сталкнулся игнорированием конроллемром некоторых моих DT (причем меня удивил тот факт, что контроллер в такой ситуации не выставлял STALL и не стимал бит активности). Тепрь при формировании TD я просчитываю сколько раз конроллер инвертирует триггер. полностью аппаратный конроль DT смоя нынешняя архитекрура не позвляет, зато если все таки сделаю отдельный QH для каждой КТ, то будет самый идеальный вариант на мой взгляд.

                    Не надо ничего просчитывать. В QH есть бит Data Toggle Control - DTC, бит 14 из DWord1. Если он стоит в 1, то биты DT берутся из qTD, а если в 0, то - из самого QH (бит 31 из Dword6), и там же контроллер его меняет по мере выполнения транзакций. После выполнения всей очереди этот бит надо сохранить - для последующих операций. Я так и делаю, и проблем никаких нет.
                    То, что при неправильном DT не снимается бит активности и не выставляется STALL - норма. Контроллер-то этот пакет посылает - он и знать не желает, правильный там DT или нет. А устройство просто игнорирует пакет с неправильным DT и никак не отвечает, считая, что этот пакет ошибочный. Тут спасает только таймаут.
                      Цитата zakharo @
                      В QH есть бит Data Toggle Control - DTC, бит 14 из DWord1.

                      Я знаю, но тут есть проблема связанная с многозадачностью. Может быть ситуация, что одна задача поставила свою QH, а в это время другая задача то же хочет посладь команду этой же КТ и она должна знать какое значение DT нужно записиывать в QH. Вот как раз в модели одна QH на КТ такой проблемы нету, я ксати уже раз писал уже об этом, видимо ты не заметил.

                      Добавлено
                      Цитата zakharo @
                      Тут спасает только таймаут.

                      :yes-sad:

                      Добавлено
                      Цитата shm @
                      полностью аппаратный конроль DT смоя нынешняя архитекрура не позвляет, зато если все таки сделаю отдельный QH для каждой КТ, то будет самый идеальный вариант на мой взгляд.
                      Сообщение отредактировано: shm -
                        Цитата shm @
                        Вот как раз в модели одна QH на КТ такой проблемы нету, я ксати уже раз писал уже об этом, видимо ты не заметил.

                        Ну да. Так и надо делать. Одна очередь к одной КТ. И дальше работать внутри этой очереди - по мере необходимости добавлять в нее новые QTD и удалять старые. Не зря же предусмотрена установка параметров КТ именно в QH. Установил раз и навсегда - и вперед.
                        Сообщение отредактировано: zakharo -
                          У флешки например две контрольные точки с двумя QH соответственно, для чтения сектора нужно выполнить bulc out и 2 bulc in.
                          Получается, что считать сектор или кластер можно только за как минимум два запроса, а поставить следующий сектор можно только дождавшись готовности первого?
                          Или я опять всё перепутал.
                          Сообщение отредактировано: StasNewOs -
                            Ну да. Сама флешка не является многозадачной, она не может принять сразу кучу SCSI-команд, а потом их выполнять. Поэтому обращаться к ней надо в строго определенной последовательности: выдать CBW, потом прочитать (или записать, если делаем запись) данные, и потом прочитать и проверить CSW. И только потом можно выдавать следующую команду.
                              самое большое ускорение которое мы можем придать флешке, это поставить две её QH на каждую КТ в кольцо и хоть не придётся их заполнять постоянно.

                              Добавлено
                              выполнять вторую, пока не выполниться первая не получается
                                Это да, приходится применять критические секции. Можно также разработать алгоритм отложенного выполнения команд, но для этого потребуется еще одна очередь, зато появится возможность асинхронной работы внутри потока, хотя последнее особого смысла не имеет.
                                Сообщение отредактировано: shm -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (51) « Первая ... 38 39 [40] 41 42 ...  50 51


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0718 ]   [ 15 queries used ]   [ Generated: 20.07.25, 09:58 GMT ]