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

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

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

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

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

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


 
Опции темы
Непрочитано 18.04.2014, 13:16  
MaxiMuz79
Гражданин KAZUS.RU
 
Аватар для MaxiMuz79
 
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 529
Сказал спасибо: 74
Сказали Спасибо 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.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,615
Сказал спасибо: 115
Сказали Спасибо 809 раз(а) в 586 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Как расчитать время выполнения прерывания в STM32?

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

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

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

MaxiMuz79, ну так надо же реально на вещи смотреть: если вам с частотой в 1МГц надо сделать что-то, требующее 1мкс времени, то уже есть шансы не успеть.
Поэтому лучше флаги выставлять и просто пропускать то, что не успеваете сделать. Если же ничего пропускать нельзя, то выбирать более мощный МК или параллелить задачи на несколько МК.
__________________
Союз Советских Социалистических Округов Северной Америки
eddy вне форума  
Непрочитано 18.04.2014, 14:21  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
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.RU
 
Аватар для MaxiMuz79
 
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 529
Сказал спасибо: 74
Сказали Спасибо 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.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 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.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Как расчитать время выполнения прерывания в STM32?

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

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

Каждый решает задачу как умеет. Либо использовать железо с большим аппаратным запасом (память, быстродействие), либо уметь программировать (знание алгоритмов и умение выжимать из железа все до последней капли). Как говрится - каждому свое - Кесарю -кесарево, а слесарю - слесарево.
Boba_spb вне форума  
Непрочитано 18.04.2014, 16:53  
MaxiMuz79
Гражданин KAZUS.RU
 
Аватар для MaxiMuz79
 
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 529
Сказал спасибо: 74
Сказали Спасибо 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, время: 11:41.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot