-
- Любой таймер в непрерывном режиме. Дополнительно ещё и прерывания
можно использовать под свои задачи, просто каждый раз пересчитывать
временную точку. - Dingo(29.05.2023 05:34)
- Когда нужна задержка на, тактов, 6, таймером будет не эффективно. - Nikolay_Po(29.05.2023 09:29)
- Согласен, на единицы тактов nop-ами лучше. Но следует пересчитывать
под конкретную частоту. - Dingo(29.05.2023 09:58)
- может
иконамибарьерами? - Vit(29.05.2023 14:32) - В Матлабе. - Kpoк(29.05.2023 14:07)
- может
- Как правило, при формировании строба требования к задержке "не
менее N микросекунд". Если получится N+1..2, нет повода горевать.
Экстремальная эффективность нужна крайне редко, вот и не надо
заморачиваться заранее, а то не останется времени на отдых... SciFi(1 знак., 29.05.2023 09:37, картинка)
- Такое я вообще машиной состояний делаю, пусть себе в фоне крутится, производительности не мешает... - Nikolay_Po(29.05.2023 09:41)
- Согласен, на единицы тактов nop-ами лучше. Но следует пересчитывать
под конкретную частоту. - Dingo(29.05.2023 09:58)
- Когда нужна задержка на, тактов, 6, таймером будет не эффективно. - Nikolay_Po(29.05.2023 09:29)
- Вроде как он фича кортексов M3 и выше. Емнип, на luminary я его
тоже юзал. А вот что на M0 его нет - то я щетаю косяк арма (вместе
с VTOR и BASEPRI) - LightElf(28.05.2023 16:49)
- на M23 тоже нет - Vit(28.05.2023 23:58)
- Тута пишут что есть (страница 7-9) LightElf(33 знак., 29.05.2023 12:36, ссылка)
- Только для членов профсоюза. - SciFi(29.05.2023 12:40)
- Тута пишут что есть (страница 7-9) LightElf(33 знак., 29.05.2023 12:36, ссылка)
- на M23 тоже нет - Vit(28.05.2023 23:58)
- Ну это уже совсем от безысходности. Когда и таймеры кончились, и
вообще вариантов не осталось. Не дай бог так оголодать... - SciFi(28.05.2023 15:43)
- У меня таймеры заканчиваются в каждом втором проекте. Делать из них
микросекундные задержки совсем некуртуазно. Я даже не понимаю какой
с этого профит. Другое дело - таймер больших задержек. Под это я
стандартно выделяю отдельный простой таймер (иногда SysTick) и он
генерирует прерывания с нужным мне дискретом (обычно 10 мс). - my504(28.05.2023 15:54)
- Я давно обнаружил, что большинство вопросов времени решаются в
стиле "start = current_time(); while (current_time() - start <
BLAH_BLAH) { /* wait */ }". То есть один таймер (обычно
DWT->CYCCNT) решает почти все такие вопросы. Никаких
регулярных прерываний. - SciFi(28.05.2023 16:52)
- Либо задержка блокирующая, либо работает через прерывания. Делать
блокирующие задержки значительной длительности - плохая идея. А
маленькие можно и традиционным способом через программный счетчик
циклов. По любому для них особой точности не получить и она не
требуется. - my504(28.05.2023 17:15)
- Да, по приведённому коду - блокирующая. Если без ОС - то автор, предположительно, понимает что делает: нет чего-то, что надо отслеживать на интервале такого замера; если ОС - то на крайний случай вытеснится задача. К тому же прерывания тоже имеют время реакции, сохранения на стек, загрузки из стека; так что для микросекундных - вполне вариант при определённых условиях. - Dingo(29.05.2023 04:52)
- Неблокирующая. Main Loop + protothreads. Удивительно, но решает
почти все мои вопросы. В редких случаях, когда нужна точная
времянка, есть аппаратные таймеры и прерывания. - SciFi(28.05.2023 17:32)
- Тогда у вас скорее не while(), a PT_WAIT_WHILE() :о) - Dingo(29.05.2023 04:55)
- Строго говоря, можно и while (...) { PT_YIELD(...); } :-) - SciFi(29.05.2023 09:40)
- Это частности; существенно то, что вы умолчали об используемом
вызове ОС, но утверждали, что неблокирующий и оно так работает. - Dingo(29.05.2023 09:57)
- Арестуйте меня :-) - SciFi(29.05.2023 09:58)
- Не дождётесь. ;-) - Dingo(29.05.2023 10:02)
- Арестуйте меня :-) - SciFi(29.05.2023 09:58)
- Это частности; существенно то, что вы умолчали об используемом
вызове ОС, но утверждали, что неблокирующий и оно так работает. - Dingo(29.05.2023 09:57)
- Строго говоря, можно и while (...) { PT_YIELD(...); } :-) - SciFi(29.05.2023 09:40)
- Тогда у вас скорее не while(), a PT_WAIT_WHILE() :о) - Dingo(29.05.2023 04:55)
- Либо задержка блокирующая, либо работает через прерывания. Делать
блокирующие задержки значительной длительности - плохая идея. А
маленькие можно и традиционным способом через программный счетчик
циклов. По любому для них особой точности не получить и она не
требуется. - my504(28.05.2023 17:15)
- Я давно обнаружил, что большинство вопросов времени решаются в
стиле "start = current_time(); while (current_time() - start <
BLAH_BLAH) { /* wait */ }". То есть один таймер (обычно
DWT->CYCCNT) решает почти все такие вопросы. Никаких
регулярных прерываний. - SciFi(28.05.2023 16:52)
- У меня таймеры заканчиваются в каждом втором проекте. Делать из них
микросекундные задержки совсем некуртуазно. Я даже не понимаю какой
с этого профит. Другое дело - таймер больших задержек. Под это я
стандартно выделяю отдельный простой таймер (иногда SysTick) и он
генерирует прерывания с нужным мне дискретом (обычно 10 мс). - my504(28.05.2023 15:54)
- Любой таймер в непрерывном режиме. Дополнительно ещё и прерывания
можно использовать под свои задачи, просто каждый раз пересчитывать
временную точку. - Dingo(29.05.2023 05:34)