Рано вам отвечать на вопросы связанные с USB…
от нехватки знаний бред и пишите…
цитата из кривого дескриптора
Endpoint Descriptor 83 3 In, Interrupt, 16 ms
|6|bInterval|1|10h|16 ms|
16 ms это сколько раз в секунду?
А если частота проца будет в разы больше и ядер 10шт, данные быстрее с этим дескриптором пойдут? а что будет с функцией которая попытается отправлять чаще?
Ацп на 2040 500 Килосамплей в секунду, даже еслиб он был блокирующим, все равно это явно быстрее чем 16мс на 1 измерение
А еще данные АДС могут выгружаться по ДМА…
вообще-то именно так.
Читайте что такое ДМА и как с его помощью забирать данные с АЦП и складывать в буфер
В вашей модели мультиплексор - идеальный и коммутирует аналоговые пины за пренебрежимо малое время?
даже если я впишу вместо 16мс значение в 1 мс, это максимальное число.
хост будет опрашивать НЕ БЫСТРЕЕ этого числа.
и задача сводится к отправке новой порции как только МОЖНО ОТПРАВИТЬ и данные лучше свежие, а не 1/100 секунды до этого.
Вот только Ардуино не знает, что она должна работать гораздо быстрее.
написал код на основе варианта из библиотеки
void loop() {
uint64_t i;
for(i=0; i<25000; i++){
val = analogRead(26);
val = map(val, 0, 1023, -32767, 32767);
gamepad.SetX(val);
val = analogRead(27);
val = map(val, 0, 1023, -32767, 32767);
gamepad.SetY(val);
val = analogRead(28);
val = map(val, 0, 1023, -32767, 32767);
gamepad.SetZ(val);
}
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}
частотомер на работе, там же и рс232-USB, поэтому посчитал по секундомеру 50 миганий светодиода.
Вышло что за секунду цикл отрабатывает 37 тыс раз
даже если я результат на 3 умножу 500 Килосамплей в секунду в текущем применении (из коробки) не выходит.
или 370 раз за период в 1/100
вывод - больше скажутся данные просроченные на 1/100 пока процедура висела и жала очереди.
Конечно 500к у вас не выйдет, кто бы сомневался. И что?
Вы только что плакались, что ваш код всего 60 раз в секунду выдает и вы мечтаете о 1000 раз - а тут уже 37 тыс не устраивают?
Вы реально смотреть на вещи умеете? Или как баба - сколько не дай - все мало?
Технический подход к задаче - это определить какая частота вам нужна. Если же вы говорите что-то типа “чем больше - тем лучше” - вы не программист, вы балабол.
причем это вы работаете через функцию ардуино. Она РаундРобин(скорее всего)не использует.
Работайте через Pico SDK - будет еще в 2-3 раза быстрее.
Вы про функцию чтения всего порта зачем спрашивали - просто так, покрасоваться? Она из СДК, а в ардуино такого нет.