Я на гитхабе, в ЖЖ
STM32 и USB (практика)
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
Wireshark анализирует пакеты после того, как ядро их уже обработали. Поэтому для низкоуровневой отладки не годится. Только логанализатор.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Реклама
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Так Wladimir_TS же говорит что обмен начинается, и только потом отваливается. Значит пакеты идут.
Ну и остальные соображения (про установку современной системы в дуалбут с winXP, например) никуда не деваются.
Ну и остальные соображения (про установку современной системы в дуалбут с winXP, например) никуда не деваются.
Кстати, вы программный USB ковыряете или аппаратный? Если vusb, то по нему у меня есть статья на Хабре, где упоминается в том числе поэтапная отладка. Вот до аппаратного пока не дошел.пытался сделать USB, правда на AVR
Последний раз редактировалось COKPOWEHEU Чт апр 01, 2021 13:06:32, всего редактировалось 1 раз.
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
Ну, ХЗ. Лично у меня основные трудности вызвало именно оперирование с этими дебильными toggle-битами в регистрах STM32, а если их неправильно выставить, получаются битые пакеты или еще какие ошибки, wireshark их никак не отображал.
А вот когда уже с пакетами все было ОК, то и wireshark был уже не нужен: там все совсем уж элементарно.
А вот когда уже с пакетами все было ОК, то и wireshark был уже не нужен: там все совсем уж элементарно.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Оно может и элементарно, но очень удобно когда показывает какие именно запросы хост посылает и принимает ли ответы. Или, скажем, что в какой-то момент запросы прекращаются.
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4008014#p4008014"]Так Wladimir_TS же говорит что обмен начинается, и только потом отваливается. Значит пакеты идут.
Ну и остальные соображения (про установку современной системы в дуалбут с winXP, например) никуда не деваются.
Аппаратный с внешним контролером на шине внешней памяти данных ATMEGA128 Задача работа в WimXP, другая система - неможно и точка.
Тип контролера могу глянуть завтра на работе. Именно начинается обмен проходят первые приветствия идет запрос конечных точек и все облом. При этом устройство в системе не появляется вообще. Никаких ошибок в логах - ничего.
Добавлено after 2 minutes 31 second:
[uquote="Z_h_e",url="/forum/viewtopic.php?p=4007981#p4007981"]
Он умеет декодировать USB пакеты на лету ? Я таких пока не встречал. Есть акиповский - он не умеет декодировать USB.
Ну и остальные соображения (про установку современной системы в дуалбут с winXP, например) никуда не деваются.
Кстати, вы программный USB ковыряете или аппаратный? Если vusb, то по нему у меня есть статья на Хабре, где упоминается в том числе поэтапная отладка. Вот до аппаратного пока не дошел.[/uquote]пытался сделать USB, правда на AVR
Аппаратный с внешним контролером на шине внешней памяти данных ATMEGA128 Задача работа в WimXP, другая система - неможно и точка.
Тип контролера могу глянуть завтра на работе. Именно начинается обмен проходят первые приветствия идет запрос конечных точек и все облом. При этом устройство в системе не появляется вообще. Никаких ошибок в логах - ничего.
Добавлено after 2 minutes 31 second:
[uquote="Z_h_e",url="/forum/viewtopic.php?p=4007981#p4007981"]
Воспользуйся saleae logic. Этот логический анализатор китайцы мешками по 3 копейки продают, а ПО оригинальное работает.[/uquote]Wladimir_TS писал(а):Нет-ли со стороны компа какого-то ПО - которое может смотреть пакеты USB в сырой форме
Он умеет декодировать USB пакеты на лету ? Я таких пока не встречал. Есть акиповский - он не умеет декодировать USB.
- Реклама
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
[uquote="Wladimir_TS",url="/forum/viewtopic.php?p=4008394#p4008394"]Задача — работа в WinXP, другая система - неможно и точка.[/uquote]
Это что — первоапрельская шутка? Или в психушке день открытых дверей?
Это что — первоапрельская шутка? Или в психушке день открытых дверей?
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4007988#p4007988"]
Неможно - это рабочий комп на котором параллельно крутятся программы по работе, они в XP-то идут со скрипом ибо под DOS писаны. К тому-же *nix слишком сложен для меня. Имел счастье ставить - 2 месяца е....и результат ноль ибо как раз USB не видит. Вообще, а винда любая видит и прекрасно работает.
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4007988#p4007988"]Кстати, именно на winXP тестировать USB не рекомендую: одна небольшая ошибка в дескрипторе - и получите BSOD, я такое уже ловил.[/uquote]
BSOD небыло - было отключение конкретного порта и более с ним не работало ничего до перезагрузки.
Нужно смотреть именно низкоуровневые пакеты что ходят на этапе установления соединения до регистрации устройства в системе.
Добавлено after 4 minutes 26 seconds:
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4008395#p4008395"][uquote="Wladimir_TS",url="/forum/viewtopic.php?p=4008394#p4008394"]Задача — работа в WinXP, другая система - неможно и точка.[/uquote]
Это что — первоапрельская шутка? Или в психушке день открытых дверей?[/uquote]
Нет это реальность.
Вот будет ли работать на таком - не уверен. Впрочем, никто не мешает установить в дуалбут что-то более современное и удобное для разработки. Да хотя бы Убунту.[/uquote]По винХП естественно.
Неможно - это рабочий комп на котором параллельно крутятся программы по работе, они в XP-то идут со скрипом ибо под DOS писаны. К тому-же *nix слишком сложен для меня. Имел счастье ставить - 2 месяца е....и результат ноль ибо как раз USB не видит. Вообще, а винда любая видит и прекрасно работает.
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4007988#p4007988"]Кстати, именно на winXP тестировать USB не рекомендую: одна небольшая ошибка в дескрипторе - и получите BSOD, я такое уже ловил.[/uquote]
BSOD небыло - было отключение конкретного порта и более с ним не работало ничего до перезагрузки.
Нужно смотреть именно низкоуровневые пакеты что ходят на этапе установления соединения до регистрации устройства в системе.
Добавлено after 4 minutes 26 seconds:
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4008395#p4008395"][uquote="Wladimir_TS",url="/forum/viewtopic.php?p=4008394#p4008394"]Задача — работа в WinXP, другая система - неможно и точка.[/uquote]
Это что — первоапрельская шутка? Или в психушке день открытых дверей?[/uquote]
Нет это реальность.
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Это предложение не понял. То есть у вас к m128 прикручен преобразователь чего-то в usb?Аппаратный с внешним контролером на шине внешней памяти данных ATMEGA128
Нет, тестирование работоспособности в экзотических системах это само собой. Но при разработке-то зачем себя мучить?Задача работа в WimXP, другая система - неможно и точка.
Что значит "запрос конечных точек"? Если ConfigurationDescriptor передался, то хоть как-то в системе опознаться должно. Хотя в winXP не уверен...Именно начинается обмен проходят первые приветствия идет запрос конечных точек и все облом.
Вы какое устройство вообще эмулируете?
Виртуальная машина или DOSBox не помогают?они в XP-то идут со скрипом ибо под DOS писаны.
Не исключено, что я в настройках устройства косячил сильнее, так что и BSOD'ы были.BSOD небыло - было отключение конкретного порта и более с ним не работало ничего до перезагрузки.
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
Про хрюндель - бред какой-то!
Я вообще любую разработку чего угодно, кроме игр, под геймерскую прошивку считаю идиотизмом. А разрабатывать не-игры для прошивки, которая уже лет 15 как deprecated…
Ну есть же современная мастдайка — бубунта называется. Чего бы, коль так линукс не нравится, не работать в этой мастдайке?
Я вообще любую разработку чего угодно, кроме игр, под геймерскую прошивку считаю идиотизмом. А разрабатывать не-игры для прошивки, которая уже лет 15 как deprecated…
Ну есть же современная мастдайка — бубунта называется. Чего бы, коль так линукс не нравится, не работать в этой мастдайке?
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Ну если есть доисторический софт, который на современных ОС не работает, куда деваться? Хотя даже так проще найти не менее антикварный компьютер специально под такие софтины. Даже эмуляторы могут не спасти - если завязка на адреса железа, прерывания и прочие развлечения времен DOS'а.
У нас аналогичная фигня на работе началась: есть древняя плата под ISA шину, на которую часть задач завязана. Плюс когда-то внедрили LabView. И крутится все это на машинке с процессором 600 МГц что ли. Обновлять или хотя бы переустанавливать тамошнюю XP все боятся - а ну как доломается. Сейчас потихоньку переходим на что-то более вменяемое - Debian и автоматизация на Lua. Больше всего сомнений пока вызывает подключение GPIB: как он отображается (должен отображаться) в системе я не знаю.
У нас аналогичная фигня на работе началась: есть древняя плата под ISA шину, на которую часть задач завязана. Плюс когда-то внедрили LabView. И крутится все это на машинке с процессором 600 МГц что ли. Обновлять или хотя бы переустанавливать тамошнюю XP все боятся - а ну как доломается. Сейчас потихоньку переходим на что-то более вменяемое - Debian и автоматизация на Lua. Больше всего сомнений пока вызывает подключение GPIB: как он отображается (должен отображаться) в системе я не знаю.
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Ну вперед, перепишите драйвер под древнюю железяку, от которого нет исходников. Бесплатно, разумеется.
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Сообщения: 145
- Зарегистрирован: Пн апр 02, 2012 15:56:23
Коллеги, прошу совета: добавил в свой код возможность отправки данных, размер которых больше буфера (до этого посылал, сколько поместится), включил в аргументы функции отправки третий параметр - callback. Так вот такой вопрос: как лучше (как принято): принимать указатель на функцию или std::function? Во втором случае размер прошивки сразу же увеличивается на ~1,2Кб, использование RAM на ~100Байтов, зато появляется возможность принимать в качестве callback-ов лямбды. Вроде и удобнее, но килобайт тоже на дороге не валяется.
И второй вопрос: как я понял, размер пакета для нулевой EP ограничен снизу, для FS USB 2.0 у меня меньше 16 байтов не работает. Действительно ли есть такое ограничение, или где-то в коде ошибка?
Спасибо!
И второй вопрос: как я понял, размер пакета для нулевой EP ограничен снизу, для FS USB 2.0 у меня меньше 16 байтов не работает. Действительно ли есть такое ограничение, или где-то в коде ошибка?
Спасибо!
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="azhel12",url="/forum/viewtopic.php?p=4009834#p4009834"]Так вот такой вопрос: как лучше (как принято): принимать указатель на функцию или std::function? Во втором случае размер прошивки сразу же увеличивается на ~1,2Кб, использование RAM на ~100Байтов, зато появляется возможность принимать в качестве callback-ов лямбды.[/uquote]
Разве по указателю на функцию нельзя передать лямбду?
А так можно передать любую лямбду, не важно какая у нее сигнатура:
Разве по указателю на функцию нельзя передать лямбду?
Код: Выделить всё
using FP = void(*)(const char*, int);
void foo(FP f) { f("Hello", 123); }
foo([](const char* s, int val) { rtt.println(s, val); });
Код: Выделить всё
void foo(auto f) { f("Hello", 123); }
foo([](auto s, auto val) { rtt.println(s, val); });
- Сообщения: 145
- Зарегистрирован: Пн апр 02, 2012 15:56:23
Вроде нет, по крайней мере мой g++ выдаёт: cannot convert XXX::<lambda()>' to 'XXX::InTransferCallback' {aka 'void (*)()'}Reflector писал(а):Разве по указателю на функцию нельзя передать лямбду?
Спасибо, попробую когда-нибудь. В текущей ситуации не подходит, потому что callback я сохраняю как поле класса (чтобы после передачи последнего куска вызвать).Reflector писал(а):А так можно передать любую лямбду, не важно какая у нее сигнатура
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
Нужно сохранять callback как поле класса?
Код: Выделить всё
using FP = void(*)(int);
class Bar
{
public:
Bar(FP f, int arg) : f(f), arg(arg) {}
void print() { f(arg); }
private:
FP f;
int arg;
};
Bar bar([](int val) { rtt.println(val); }, 555);
bar.print();
- Сообщения: 145
- Зарегистрирован: Пн апр 02, 2012 15:56:23
Reflector, спасибо большое, разобрался с Вашей помощью. Оказалось, что невозможно привести к указателю на функцию лямбду с захватом (собственно, и код из-за захвата разрастается). Буду думать дальше, сильно ли удобен захват переменных и стоит ли оно того.
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="azhel12",url="/forum/viewtopic.php?p=4009904#p4009904"]Оказалось, что невозможно привести к указателю на функцию лямбду с захватом[/uquote]
Лямбда с захватом трансформируется в класс который в полях хранит то, что захватил, к обычной функции оно уже не приводится.
Лямбда с захватом трансформируется в класс который в полях хранит то, что захватил, к обычной функции оно уже не приводится.
- Сообщения: 145
- Зарегистрирован: Пн апр 02, 2012 15:56:23
Не знал этой особенности.Reflector писал(а):Лямбда с захватом трансформируется в класс который в полях хранит то, что захватил, к обычной функции оно уже не приводится.


