auric 0 8 января Опубликовано 8 января (изменено) · Жалоба Искал но не нашел темы достаточно объемной и так сказать подходящей, кроме как на радиокоте (хотя объемной ее назвать сложно). Если верить https://www.radiokot.ru/forum/viewtopic.php?p=2444545 то время выхода в прерывание (так сказать накладные расходы) составляет12 тактов. Хочу понять что не так у меня, если я взводя таймер всего на один такт меньше 1 мкс получаю больше 3-х мкс задержки выхода в прерывание (сперва взводил на 4мкс, а получал 7)? Как проверял, взводил бит перед включением таймера и сбрасывал в прерывании, смотрел осциллом. Короче вижу, что достаточно много уходит на накладные расходы, пусть даже замер велся очень примерно. Частота 72МГц, то есть такты явно на порядки отличаются. Написано в Cocox, компилятор GNU, оптимизацию не включал, тк она мешает отладке, но опять же не думаю, что это может так влиять, ну блин порядки целые разница, не разы. Ну естественно гадать на кофейной гуще не предлагаю, просто хочу уточнить если кто-то заморачивался по данному вопросу, у кого какие получались задержки и может кто-то проводил действия по уменьшению этого времени. Изменено 9 января пользователем auric Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 8 января Опубликовано 8 января · Жалоба Может хоть одну строчку кода покажете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 190 8 января Опубликовано 8 января · Жалоба Есть миллиард способов превратить эти 12 тактов в 12 + N, где N варьируется в зависимости от контекста, работающей периферии, погоды на Марсе и вообще, способностей изучающего к грамотному измерению этих самых тактов задержки. Неужели это действительно так необходимо?🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 61 8 января Опубликовано 8 января · Жалоба Странный вопрос у ТС при наличии DWT Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 8 января Опубликовано 8 января · Жалоба Вы поняли что хочет ТС? Я ничегошеньки, потому и хотелось бы код посмотреть, может там намёки есть. Хотя, если код такой же как русский в сообщении, то шансы малы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 61 8 января Опубликовано 8 января · Жалоба Да он уже сам забыл зачем это ему. После слова Кокос можно не читать дальше Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 86 8 января Опубликовано 8 января · Жалоба 3 часа назад, auric сказал: такт меньше 1 мкс получаю больше 3-х задержки выхода в прерывание Скорее, не задержка входа в прерывание, а банальный пропуск нескольких прерываний из-за того, что слишком много кода в самом прерывании. Там, кроме аппаратных тактов, есть еще и программные, добавляемые компилятором. А ведь время исполнения инструкций, да еще на частоте 72 МГц из-за тормознутости флеша, оно будет больше, чем кажется на первый взгляд. Одна инструкция может исполняться несколько машинных тактов. 3 часа назад, auric сказал: оптимизацию не включал Вот именно! Да еще если и HAL в прерывании, тогда ну чего ж удивляться. 1 час назад, x893 сказал: После слова Кокос ...я удивлен, что кто-то его откопал из могилы 🙂 Он же помер лет 10 назад или около того. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 86 9 января Опубликовано 9 января · Жалоба Как я понял, тут у автора такое дело. Он дёргает ногу МК в лог. 1 перед запуском аппаратного таймера, запускает его на короткое время счета и по срабатывания его прерывания убирает ногу в лог. 0. Осцилом смотрит длительность получившегося импульса и соотносится с тем, что он хотел бы увидеть по расчётам. И тут все бы ничего, но помимо аппаратных тактов входа-выхода прерывания, существуют ещё и программные инструкции, встааляемые компилятором, такие как перемещение указателя стека, а так же непосредственно инструкции дергания ногой МК, коих при выключенной оптимизации немало, особенно если используется какой-нить SPL или HAL. Да ещё накладываются и задержки конвейера флеша при работе на высокой частоте ядра. Ну и расходы инструкций на запуск таймера. Как итог, длительность сформированной импульса получается заметно больше выставленного интервала счета таймера. Тут наверно ещё ошибки добавляет и неправильно выставленный интервал в самом таймере. Классика - значение ARR должно быть на 1 меньше расчётного интервала счета. Вообще, снизьте тактовую частоту МК до базовых 8 МГц, так и смотрите Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 46 9 января Опубликовано 9 января · Жалоба Может быть приоритет на это прерывание мал, из-за чего системный таймер его иногда перебивает. Отсюда то одна задержка, то другая. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 61 9 января Опубликовано 9 января · Жалоба 10 minutes ago, Xenia said: Может быть приоритет на это прерывание мал, из-за чего системный таймер его иногда перебивает. Отсюда то одна задержка, то другая. SysTick он выключил наверняка. Не совсем же он гуру программирования. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 29 9 января Опубликовано 9 января · Жалоба В 09.01.2024 в 00:16, EdgeAligned сказал: ...я удивлен, что кто-то его откопал из могилы 🙂 Он же помер лет 10 назад или около того. .. а в проектах до сих пор живет. Хорошо хоть предыдущий разработчик дистрибутивы на память оставил. С другой стороны, в кейл перевести нетрудно, синтаксис и там, и там GCC-шный. Да и что такое 10 лет ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
auric 0 9 января Опубликовано 9 января · Жалоба 28 минут назад, x893 сказал: SysTick он выключил наверняка. Не совсем же он гуру программирования. SysTick есть на миллисекунду, не думаю что он. 2 часа назад, Xenia сказал: Может быть приоритет на это прерывание мал, из-за чего системный таймер его иногда перебивает. Отсюда то одна задержка, то другая. может, но смущает порядок разницы, ведь другие процессы медленные по сравнению с этим (уставку специально сделал меньше микросекунды для проверки) и их не настолько много. Попробую когда время будет повторить тест вообще с одним таймером. Здесь же хотел понять, был ли кто-то из участников так сказать так же заинтересован и замерял выход в прерывание? Есть ли какая-то практическая статистика? Или только теория... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 61 9 января Опубликовано 9 января · Жалоба 1 minute ago, auric said: не думаю что он Думать не надо. Просто выключить. 1 minute ago, auric said: Есть ли какая-то практическая статистика? Когда она кому-нибудь понадобится, то при помощи DWT это делается минут за 10 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
auric 0 9 января Опубликовано 9 января · Жалоба 47 минут назад, MrYuran сказал: .. а в проектах до сих пор живет. Хорошо хоть предыдущий разработчик дистрибутивы на память оставил. С другой стороны, в кейл перевести нетрудно, синтаксис и там, и там GCC-шный. Да и что такое 10 лет ) да так все и было, начал в нем, зато бесплатный, устраивает на все сто, зато не надо гоняться за кряками итп кейлов всяких, перенести хоть в кейл, хоть в иар не проблема, работал и в них, не нашел ничего особенного, чтобы на них перейти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 245 9 января Опубликовано 9 января · Жалоба 5 минут назад, auric сказал: Здесь же хотел понять, был ли кто-то из участников так сказать так же заинтересован и замерял выход в прерывание? Есть ли какая-то практическая статистика? Или только теория... Практическая статистика у нас полностью совпадает с данными, приведёнными в мануалах. Чудес не встречал. А что там у вас за бардак в коде творится - только Ванга сможет угадать. PS: Это уже не говоря, что измерять такие времена с помощью осциллографа - это зашквар. О чём уже многократно писали. Но вы ведь не читатель, верно? Вы писатель. Мануалов не читаете, советов в форумах - тоже, в дизассемблер не смотрите. Да и сами как видно думать не хотите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться