Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

Как расчитать время выполнения прерывания в STM32?

Непрочитано 18.04.2014, 13:16  
MaxiMuz79
Гражданин KAZUS.RUN
 
Аватар для MaxiMuz79
 
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 528
Сказал спасибо: 73
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
MaxiMuz79 на пути к лучшему
По умолчанию Как расчитать время выполнения прерывания в STM32?

Опять уперся в теже самые ворота.
Имею прерывание по таймеру:
Код:
void TIM2_IRQHandler (void)
{
	u32 i;
	TIM2-›SR &=~(TIM_SR_UIF);// сброс ф.прерывания
	SWITCH_PIN(PC8);
	// for (i=0;i‹40;i++) {	__NOP();}
}
Настроено на сработку с частотой 125 000 Гц. И действительно замеряю частотомером частоту на РС8 - около 62кГц. Все сходиться!
Далее в обработчик должен добавиться несложный код: с десяток простых проверок и выставление нужных флажков. И теперь дабы приблизительно сэмитировать время выполнения этого кода раскомментирую строчку for (i=0;i‹40;i++) { __NOP();}
По моим приблизительным рассчетам :
Код:
{
  u32 i;
  TIM2-›SR &=~(TIM_SR_UIF);// сброс ф.прерывания    +4clk
  SWITCH_PIN(PC8);                    +12clk
  for (i=0;i‹40;i++) {	__NOP();}
  // i++                                      (+1clk
  // i‹40                                     +1clk
  // jmp                                      +1clk)*40
}
В итоге 4+12+3*40=136clk плюс вход/выход (12clk +12 clk ) = 160 clk.
Для корректной работы обработчика требуется с Fck=24МГц: f24M/f125K=192 clk , т.е. получается запас тактов еще должен быть!
Активных обработчиков которые забирали время больше нет, майн по идее ничего не сьедает.
Асм-листинг Keil мне не дает, поэтому как там в реальности я даже не могу посмотреть. Оптимизация стоит на (-O0). Может быть в этом дело?
Хотелось бы услышать в чем я не прав.
Но главный вопрос в том , как еще можно расчитать время выполнения обработчика, не прибегая к частотомеру ?
Реклама:

Последний раз редактировалось MaxiMuz79; 18.04.2014 в 13:20.
MaxiMuz79 вне форума  
Непрочитано 18.04.2014, 13:41  
eddy
Почётный гражданин KAZUS.RUN
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Как расчитать время выполнения прерывания в STM32?

Что-то вы явно не так делаете! Обработчик прерывания должен лишь сбросить флаг прерывания и инкрементировать какую-нибудь переменную или установить какой-нибудь флаг. А уж в цикле main вы проверяете, установлен ли флаг. Если установлен - делаете уже свои какие-то действия.

А так точно ничего работать не будет.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
eddy вне форума  
Непрочитано 18.04.2014, 13:50  
MaxiMuz79
Гражданин KAZUS.RUN
 
Аватар для MaxiMuz79
 
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 528
Сказал спасибо: 73
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
MaxiMuz79 на пути к лучшему
По умолчанию Re: Как расчитать время выполнения прерывания в STM32?

Сообщение от eddy Посмотреть сообщение
А так точно ничего работать не будет.
я всего лишь смоделировал ситуацию, период срабатывания таймера может быть в различных пределах ....
Уменьшая количество циклов до 30, в конкретном случае, частота нормализуется до заданной.
MaxiMuz79 вне форума  
Непрочитано 18.04.2014, 13:52  
eddy
Почётный гражданин KAZUS.RUN
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Как расчитать время выполнения прерывания в STM32?

MaxiMuz79, ну так надо же реально на вещи смотреть: если вам с частотой в 1МГц надо сделать что-то, требующее 1мкс времени, то уже есть шансы не успеть.
Поэтому лучше флаги выставлять и просто пропускать то, что не успеваете сделать. Если же ничего пропускать нельзя, то выбирать более мощный МК или параллелить задачи на несколько МК.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
eddy вне форума  
Непрочитано 18.04.2014, 14:21  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию

MaxiMuz79, наверное пора забыть AVR ...

Сообщение от MaxiMuz79 Посмотреть сообщение
Асм-листинг Keil мне не дает,
а опции в проекте соответствующие выбраны ?
Миниатюры:
Нажмите на изображение для увеличения
Название: asm.png
Просмотров: 62
Размер:	72.6 Кб
ID:	62987  
__________________
Осторожно , злой кот

Последний раз редактировалось dosikus; 18.04.2014 в 14:23.
dosikus вне форума  
Непрочитано 18.04.2014, 16:19  
MaxiMuz79
Гражданин KAZUS.RUN
 
Аватар для MaxiMuz79
 
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 528
Сказал спасибо: 73
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
MaxiMuz79 на пути к лучшему
По умолчанию Re: Как расчитать время выполнения прерывания в STM32?

Сообщение от dosikus Посмотреть сообщение
а опции в проекте соответствующие выбраны ?
если вы имеете ввиду: Assembler Listing и Cross Reference у меня они отмечены
в папке только один файл с расширением lst startup_stm32f10x_md_vl.lst
Миниатюры:
Нажмите на изображение для увеличения
Название: keillist.jpg
Просмотров: 41
Размер:	87.2 Кб
ID:	62996  
MaxiMuz79 вне форума  
Непрочитано 18.04.2014, 16:27  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Как расчитать время выполнения прерывания в STM32?

Сообщение от MaxiMuz79 Посмотреть сообщение
В итоге 4+12+3*40=136clk плюс вход/выход (12clk +12 clk ) = 160 clk.
А куда делось время, затраченное на __NOP() ?
Boba_spb вне форума  
Непрочитано 18.04.2014, 16:30  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Как расчитать время выполнения прерывания в STM32?

Можно при входе и выходе из прерывания фиксировать счетчик таймера - разница даст вам более точное время нахождения в прерывании.
Boba_spb вне форума  
Непрочитано 18.04.2014, 16:44  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Как расчитать время выполнения прерывания в STM32?

Сообщение от eddy Посмотреть сообщение
Обработчик прерывания должен лишь сбросить флаг прерывания и инкрементировать какую-нибудь переменную или установить какой-нибудь флаг.
Ну это совсем примитивно, для чего тогда приоритеты прерываний существуют, DMA всякие?

Каждый решает задачу как умеет. Либо использовать железо с большим аппаратным запасом (память, быстродействие), либо уметь программировать (знание алгоритмов и умение выжимать из железа все до последней капли). Как говрится - каждому свое - Кесарю -кесарево, а слесарю - слесарево.
Boba_spb вне форума  
Непрочитано 18.04.2014, 16:53  
MaxiMuz79
Гражданин KAZUS.RUN
 
Аватар для MaxiMuz79
 
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 528
Сказал спасибо: 73
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
MaxiMuz79 на пути к лучшему
По умолчанию Re: Как расчитать время выполнения прерывания в STM32?

Сообщение от Boba_spb Посмотреть сообщение
А куда делось время, затраченное на __NOP() ?
Да, упустил !
Тогда если на nop накинуть еще 1такт , то общее время ~184clk
MaxiMuz79 вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Решено] Так, рассказик :)) Я долго ржал :)) DK Отвлекитесь, эмбеддеры! 7 31.08.2007 22:33
[Решено] Сборник перлов любителей кабельщины mikesmith Отвлекитесь, эмбеддеры! 135 14.08.2007 15:49
[Решено] про блоки питания бу-га-га! zalman Отвлекитесь, эмбеддеры! 12 29.01.2007 10:46
[Решено] Всем эмбеддерам посвящается... Decan Отвлекитесь, эмбеддеры! 0 24.10.2005 14:43


Часовой пояс GMT +4, время: 19:51.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.