-
- Как это
неработает. Реальный случай, аналогичный твоему: il-2(939 знак., 04.11.2021 05:49)- И мне как-то аналогично повезло. :-) И именно таким макаром - вылезал за пределы массива. Ломалось то, что всё жизнь работало. :-) - Лaгyнoв(05.11.2021 20:24)
- СПАСИБО!!! Даже представить не мог чтоб звезды так сошлись, ломало размерность данных в cdc rx буфере, соответственно принятые данные не сохранялись т.к. срабатывала проверка на выход за пределы массива.. - Aleksey_75(05.11.2021 20:22)
- Ага, похожий случай. Поэтому и требуют после изменения ПО проводить испытания в полном объеме. - symbions(04.11.2021 10:41)
- А если чуть по-другому Vit(228 знак., 03.11.2021 18:26)
- АЦП молотит непрерывно? А если покрутить частоту молотилки (через
время выборки, например) и посмотреть, будет ли влияние на глюки
usb? - SciFi(03.11.2021 17:09)
- да, ацп по кругу опрашивает 5 каналов (с одним каналом тоже самое).
частоту и время крутил туда сюда, без результатов, делитель ацп и
время выборки сейчас на максимум - Aleksey_75(03.11.2021 17:12)
- Да ну нафиг. Не верю. Предлагаю не "комментировать ADC1->CR2
|= ADC_CR2_SWSTART;", а делать запуск или остановку АЦП отладчиком,
без кода. Чтобы исключить влияние меняющегося кода на это дело. - SciFi(03.11.2021 17:17)
- сек! Ну так все ок, но я не могу запускать преобразование по
завершению. если "тыкать" ручками все ок - Aleksey_75(03.11.2021 17:26)
- В каком смысле "запускать по завершению"? Разве АЦП сам по кругу не
бегает? Там через код зацикливание? - SciFi(03.11.2021 17:26)
- яж выше написал, в коде "проверили флаг готовности данных, сбросили
флаг, запустили новое" это хоть в отладке, хоть в работе, хаотично
ломает прием по cdc.. яб использовал инжектированные каналы, но их
всего 4, а у меня 5 - Aleksey_75(03.11.2021 17:30)
- Зачем "закат солнца вручную"? Образуется непредсказуемость. Я бы оставил автозапуск без автоматического сканирования каналов. По готовности очередного отсчёта, входим в прерывание. Забираем готовый отсчёт и вручную устанавливаем номер канала для послеследующего канала (следующий канал уже зафиксирован из прошлого прерывания). Так получаете стабильную выборку и, в то же время, произвольную последовательность каналов. - Nikolay_Po(03.11.2021 19:50)
- Процессорного времени хватает на обработку USB? Может, проц занят
только ожиданием флага АЦП? - SciFi(03.11.2021 17:54)
- С этим все норм, проверил, из main, раз в 5 мс. Да и усб на
прерываниях, не может друг другу мешать - Aleksey_75(03.11.2021 17:57)
- Я делаю так: В обработчиках прерываний, в прологе, устанавливаю диагностический выход в единицу. А в main(), в конце цикла, сбрасываю тот же выход в ноль. И смотрю осциллографом на ножке, как загружен процессор. Сразу видны проблемы со скоростью, если есть. - Nikolay_Po(03.11.2021 22:56)
- И вот это "из main, раз в 5 мс" вообще не понимаю. Опять же, если
"усб на прерываниях, не может друг другу мешать", значит, можно в
main() вставить "while (1) {}", и всё будет работать? Советую
проверить. - SciFi(03.11.2021 20:08)
- так в main Aleksey_75(134 знак., 03.11.2021 23:10 - 23:37)
- Завязывай писать if (что-тотам == true) RxTx(1 знак., 04.11.2021 15:45, ссылка)
- чуток в сторону, но true часто всё, что не false. а читается конструкция вааще странно. я бы предположил, что от get_systick() получаем число, но никак не bool - Vit(04.11.2021 07:43)
- Если каждые 5 мс, тогда непонятно, зачем "проверили флаг готовности
данных, сбросили флаг, запустили новое". Можно просто "запустить
новое", ведь старое за 5 мс точно закончилось? - SciFi(03.11.2021 23:27)
- привычка выработанная годами, как и проверка указателя на NULL )) ну это не сильно важно - Aleksey_75(03.11.2021 23:36)
- так в main Aleksey_75(134 знак., 03.11.2021 23:10 - 23:37)
- Всё равно хочется исключить влияние изменения прошивки при
комментировании. Тогда "static int volatile test;" и участок с
проверкой и перезапуском АЦП обернуть "if (test) { ... }". Потом
отладчиком переключаем test и смотрим, остался ли эффект. - SciFi(03.11.2021 18:00)
- Через пару часов буду за компом проверю отпишусь - Aleksey_75(03.11.2021 18:15)
- С этим все норм, проверил, из main, раз в 5 мс. Да и усб на
прерываниях, не может друг другу мешать - Aleksey_75(03.11.2021 17:57)
- яж выше написал, в коде "проверили флаг готовности данных, сбросили
флаг, запустили новое" это хоть в отладке, хоть в работе, хаотично
ломает прием по cdc.. яб использовал инжектированные каналы, но их
всего 4, а у меня 5 - Aleksey_75(03.11.2021 17:30)
- В каком смысле "запускать по завершению"? Разве АЦП сам по кругу не
бегает? Там через код зацикливание? - SciFi(03.11.2021 17:26)
- сек! Ну так все ок, но я не могу запускать преобразование по
завершению. если "тыкать" ручками все ок - Aleksey_75(03.11.2021 17:26)
- Да ну нафиг. Не верю. Предлагаю не "комментировать ADC1->CR2
|= ADC_CR2_SWSTART;", а делать запуск или остановку АЦП отладчиком,
без кода. Чтобы исключить влияние меняющегося кода на это дело. - SciFi(03.11.2021 17:17)
- да, ацп по кругу опрашивает 5 каналов (с одним каналом тоже самое).
частоту и время крутил туда сюда, без результатов, делитель ацп и
время выборки сейчас на максимум - Aleksey_75(03.11.2021 17:12)
- Как это