Думаю, это единственное логичное объяснение. Но мне не удалось найти где делается эта привязка. Но очень хочется разобраться.
Выкладываю проект, посмотрите по возможности незамыленным взглядом (сабж сидит в usbd_hid_core.c).
__1.rar ( 603.49 килобайт )
Кол-во скачиваний: 31UPD: И еще, почему-то после первого приема данных буфер - пустой (это видно по мемори дампу). Начиная со второго приема - он заполняется валидными данными.Он был не готов принимать после инициализации. Проблема решилась добавлением DCD_EP_PrepareRx(pdev, HID_OUT_EP, rxbuf, MAX_DATA_LENGTH); в USBD_HID_Init() в место после открытия ендпоинтов.
UPD2: Возможно, становится понятно поведение с "магическим" запонением приемного буфера. Насколько реален такой сценарий:
1. Объявлена переменная-буфер buf.
2. Т.к., во время инициализации не делается DCD_EP_PrepareRx(..., buf, ...), то буфер не трогается и он по дефолту равен нулю.
3. Возникает событие приема: буфер равен нулю (т.к. его никто не трогал).
4. Что-то делается в обработчике.
5. Последняя строчка - это как раз DCD_EP_PrepareRx(..., buf, ...), т.е. тут уже нормально передается ссылка на этот несчастный буфер.
6. Ну и на последующих приемах он уже получается прилинкован к приемнику, который заполняет его валидными данными.
Я прав или не?
Сообщение отредактировал ilkz - Aug 28 2015, 06:19