реклама на сайте
подробности

 
 
> Время выполнения кода
Connor
сообщение Feb 28 2018, 08:16
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 26-05-17
Пользователь №: 97 309



У меня есть АЦП, которые начинает работать одновременно по таймеру и я хочу замерить время конвертации всех выбранных каналов с помощью таймера dwt (поднимается флаг, к примеру, TC и я меряю полученный DWT->CYCCNT) но вот какое дело, если я засовываю проверку флага в бесконечный цикл (__HAL_ADC_GET_FLAG) то получается одно значение CYCCNT, а если засовываю DWT->CYCCNT в прерывание по TC то получается совсем другое значение счётчика, гораздо большее, у меня вопрос, можно ли в принципе в отладчике засовывать счётчик dwt в обработчик прерывания? Если да, то почему получаются на столько разные значения, на порядки. Спасибо
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение Feb 28 2018, 08:34
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Connor @ Feb 28 2018, 11:16) *
Если да, то почему получаются на столько разные значения, на порядки.

Какие порядки? Этот счётчик считает такты. Их можно пересчитать в наносекунды. Приведите уже конкретные цифры. Кто знает, может быть, разница объясняется задержкой на входе в обработчик прерывания? Как знать, может быть оно у вас сделано очень-очень медленно?
Go to the top of the page
 
+Quote Post
Connor
сообщение Feb 28 2018, 09:11
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 26-05-17
Пользователь №: 97 309



Цитата(scifi @ Feb 28 2018, 03:34) *
Какие порядки? Этот счётчик считает такты. Их можно пересчитать в наносекунды. Приведите уже конкретные цифры. Кто знает, может быть, разница объясняется задержкой на входе в обработчик прерывания? Как знать, может быть оно у вас сделано очень-очень медленно?


конкретные цифры в цикле while CCYNCT = 530, в десятичной, в обработчике CCYNCT = 27157, вот на такие порядки и отличается))в десятки раз

Цитата(jcxz @ Feb 28 2018, 03:42) *
Лучше вообще ничего не куда не засовывать не зная куда суёшь. biggrin.gif
И что значит "в отладчике засовывать"? Вы DWT->CYCCNT где читаете - в своём коде или в окне "Watch" отладчика?
И да - как уже сказали - конкретные цифры в студию. А то 1 и 10 - тоже имеют разный порядок....


считаю в коде и засовывал в watch отладчика)

ацп у меня обрабатывает максимально 8 каналов, включаются они одновременно в режиме multimode, ацп тактируется 72МГц, такая же частота и у SYSCLK, поэтому вариант в CCYNCT=530 тактов лично мне видится более логичным, при 12 разрядном разрешении + 19 тактов ацп клока, выбранных в качестве времени сэмлирования, получаем кол-во тактов необходимое для конвертации всех каналов в ацп (12+19)*8 = 248, конечно чисто теоретически, но это ближе к 530 чем к 27157

Сообщение отредактировал Connor - Feb 28 2018, 09:12
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 28 2018, 10:06
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Connor @ Feb 28 2018, 11:11) *
считаю в коде и засовывал в watch отладчика)

В отладчике у Вас в это время входит ещё и время остановки на брекпоинте. Оно очень даже не маленькое.
Считывать нужно в коде. И убедиться что вход в ISR ничего не тормозит (запреты прерываний, другие ISR и т.п.). Да и поубирать чтение регистров периферии из окон Watch отладчика.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th June 2025 - 14:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01448 секунд с 7
ELECTRONIX ©2004-2016