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

 
 
> STM32F0 Время реакции и выполнения прерывания
Влад Р.
сообщение Jun 21 2016, 12:40
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 87
Регистрация: 9-12-10
Пользователь №: 61 511



Добрый день!

Имеется МК STM32F0. Работает на частоте 48 МГц. Фоновая программа представляет собой пустой бесконечный цикл. По фронту сигнала на выводе МК настроено внешнее прерывание. В обработчике прерывания только операции с портами ввода/вывода и логические операции. Все задействованные выводы сконфигурированы на работу на максимальной скорости.
Согласно статье "A Beginner’s Guide on Interrupt Latency - and Interrupt Latency of the ARM® Cortex®-M processors" время реакции на прерывание для ядра Cortex-M0 составляет 16 машинных циклов. Первой командой после входа в обработчик я считываю один из портов в/в, затем на одном из выводов другого порта устанавливаю высокий уровень. Время между фронтом внешнего сигнала, вызвавшим внешнее прерывание, и установкой высокого уровня на выводе, указанном выше, составляет 800 нс. Почему такое большое время и как можно его сократить?
В той же статье говорится о джиттере времени реакции, но неясно от каких факторов он может зависеть?
Время выполнения обработчика прерывания составило 1,5 мкс, что тоже неожиданно много. Также буду рад советам как уменьшить.

Используется Keil 5.17. Пробовал различные уровни оптимизации компилируемого кода, оптимизацию по времени/объему. Не давало положительных результатов. Размещение обработчика прерывания в ОЗУ позволило сократить время его выполнения на 0,2 мкс, но не повлияло на время реакции на прерывание.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Влад Р.
сообщение Jun 22 2016, 07:16
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 87
Регистрация: 9-12-10
Пользователь №: 61 511



Цитата(ViKo @ Jun 22 2016, 09:55) *
Включено. Иначе, что бы там делалось целых 16 тактов?

Если ограничить количество переменных, можно уложиться в те регистры, что сохраняются аппаратно.
Компилятор сам лишних регистров не сохраняет. Я так думаю.


Это бы много объяснило. Часть регистров помещается в стек аппаратно и отключить это невозможно. Время за которое это происходит составляет минимальное время реакции на прерывание (Interrupt Latency - 16 cycles).
PUSH в начале обработчика помещает дополнительно еще парочку РОН и от этого можно уйти, написав обработчик на асме.

Цитата(ViKo @ Jun 22 2016, 09:39) *
Ага. Все! biggrin.gif И неспроста.

Поясните, пожалуйста.
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 22 2016, 07:57
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(Влад Р. @ Jun 22 2016, 11:16) *
PUSH в начале обработчика помещает дополнительно еще парочку РОН и от этого можно уйти, написав обработчик на асме.


Можно, если использовать только R0 - R3, R12, а в случае дополнительной нужды в регистрах (не забываем - RISC - все действия только с регистрами, кроме загрузки-выгрузки)
без PUSH/POP не обойтись.
И кстати, bitbanding по регистрам периферии может помочь уменьшить число команд.


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jun 22 2016, 08:07
Сообщение #4


Гуру
******

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



Цитата(Obam @ Jun 22 2016, 10:57) *
И кстати, bitbanding по регистрам периферии может помочь уменьшить число команд.

Мысль, конечно, интересная, но у STM32F0 этой фичи нет.
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 22 2016, 08:24
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(scifi @ Jun 22 2016, 12:07) *
Мысль, конечно, интересная, но у STM32F0 этой фичи нет.


Cortex-M0, тогда да, пардону просим. Всё время упускаю, что есть ARMv6

Цитата(jcxz @ Jun 22 2016, 12:04) *
Или наоборот - увеличить wink.gif


Личный опыт показывает, что число команд R-M-W уменьшается wink.gif


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 22 2016, 09:03
Сообщение #6


Гуру
******

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



Цитата(Obam @ Jun 22 2016, 14:24) *
Личный опыт показывает, что число команд R-M-W уменьшается wink.gif

Если код типа:
u32 i = GPIOC->IDR & 0x1FFF;
*BITBAND_IO(&GPIOC->ODR, bitX) = 1;
то может увеличиться, так как народ часто использует команды RMW там где они реально не нужны (а периферия GPIO во многих МК как правило имеет регистры позволяющие установку/сброс отдельных битов просто командами записи, а не чтения-модификации-записи). А обращение к региону bitband требует дополнительной загрузки указателя на него.
К тому же например IAR почему-то плохо компилит код с обращением к битбанд-области - получается куча лишних команд даже при полной оптимизации. sad.gif((

Цитата(ViKo @ Jun 22 2016, 14:51) *
Я так понимаю, ARM стремилась в Cortex-M0 использовать преимущественно 16-битовые команды, ради экономии памяти.

Не правильно пояснили sm.gif
Потому, что в коде из листинга используются регистры R0-R7 и только простые режимы адресации (без автоинкрементов, длинных смещений и т.п.) и формы команд влияющие на флаги (MOVS, LSLS, ...) и т.п.
Поэтому все команды короткие.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 22 2016, 09:41
Сообщение #7


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(jcxz @ Jun 22 2016, 12:03) *
Не правильно пояснили sm.gif
Потому, что в коде из листинга используются регистры R0-R7 и только простые режимы адресации (без автоинкрементов, длинных смещений и т.п.) и формы команд влияющие на флаги (MOVS, LSLS, ...) и т.п.
Поэтому все команды короткие.

Открываем книгу The Definitive Guide to ARM® Cortex®-M0 and Cortex-M0+ Processors, Second Edition
на стр 10, смотрим рис. 1.4 с командами, и восхищаемся, что 32-битовых команд у Cortex-M0/M0+/M1 всего 6. rolleyes.gif Причем, без разницы, старшие или младшие регистры используются.

(номер поправил)

Цитата
If we look at the instruction set in a bit more details (Figure 1.4), we can see that the
Cortex-M0, Cortex-M0ю, and Cortex-M1 processors only support a small instruction set
(56 instructions). Most of these instructions are 16 bit, thus provide a very good code
density - which means it need a smaller program memory require for the same task
compared to many architecture.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jun 22 2016, 09:51
Сообщение #8


Гуру
******

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



Цитата(ViKo @ Jun 22 2016, 12:41) *
Открываем книгу The Definitive Guide to ARM® Cortex®-M0 and Cortex-M0+ Processors, Second Edition

На каком языке написано? На олбанском китайско-английском? Ржака biggrin.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 22 2016, 10:05
Сообщение #9


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(scifi @ Jun 22 2016, 12:51) *
На каком языке написано? На олбанском китайско-английском? Ржака biggrin.gif

Википедия лучше? Прикрепленное изображение
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Влад Р.   STM32F0 Время реакции и выполнения прерывания   Jun 21 2016, 12:40
- - scifi   Обращение к портам ввода-вывода тоже время должно ...   Jun 21 2016, 13:05
- - jcxz   Цитата(Влад Р. @ Jun 21 2016, 18:40) Врем...   Jun 21 2016, 13:14
- - SasaVitebsk   В статье указано, что 16 машинных циклов пройдёт о...   Jun 21 2016, 13:17
|- - dimka76   Цитата(SasaVitebsk @ Jun 21 2016, 16:17) ...   Jun 21 2016, 13:25
|- - jcxz   Цитата(SasaVitebsk @ Jun 21 2016, 19:17) ...   Jun 21 2016, 13:44
||- - SasaVitebsk   Цитата(jcxz @ Jun 21 2016, 16:44) Обычно ...   Jun 22 2016, 05:49
||- - jcxz   Цитата(SasaVitebsk @ Jun 22 2016, 11:49) ...   Jun 22 2016, 06:28
||- - ViKo   Цитата(jcxz @ Jun 22 2016, 09:28) Хотя у ...   Jun 22 2016, 06:39
|- - AlexRayne   Цитата(SasaVitebsk @ Jun 21 2016, 16:17) ...   Jun 21 2016, 13:51
|- - jcxz   Цитата(AlexRayne @ Jun 21 2016, 19:51) вр...   Jun 21 2016, 13:57
|- - AlexRayne   Цитата(jcxz @ Jun 21 2016, 16:57) Объясни...   Jun 21 2016, 15:01
||- - jcxz   Цитата(AlexRayne @ Jun 21 2016, 21:01) чт...   Jun 21 2016, 15:58
|- - RadiatoR   Цитата(jcxz @ Jun 21 2016, 16:57) ЗЫ: Кст...   Jun 21 2016, 16:25
- - Влад Р.   RE: STM32F0 Время реакции и выполнения прерывания   Jun 21 2016, 19:39
|- - jcxz   Цитата(Влад Р. @ Jun 22 2016, 01:39) Что ...   Jun 22 2016, 05:16
- - ViKo   Измените переменные на 32-битовые. Везде, где можн...   Jun 22 2016, 05:35
- - Влад Р.   Цитата(jcxz @ Jun 22 2016, 08:16) Ну а че...   Jun 22 2016, 06:13
- - Влад Р.   Цитата(jcxz @ Jun 22 2016, 09:28) А тепер...   Jun 22 2016, 06:42
|- - jcxz   Цитата(Влад Р. @ Jun 22 2016, 12:42) Можн...   Jun 22 2016, 06:45
|- - ViKo   Цитата(Влад Р. @ Jun 22 2016, 09:42) Не п...   Jun 22 2016, 06:55
|- - HHIMERA   Цитата(Влад Р. @ Jun 22 2016, 10:16) Это ...   Jun 22 2016, 07:55
||- - jcxz   Цитата(Obam @ Jun 22 2016, 13:57) И кстат...   Jun 22 2016, 08:04
||- - scifi   Цитата(Obam @ Jun 22 2016, 11:13) Cortex-...   Jun 22 2016, 08:51
|||- - Obam   Цитата(scifi @ Jun 22 2016, 12:51) Вы буд...   Jun 22 2016, 12:12
||||- - scifi   Цитата(Obam @ Jun 22 2016, 15:12) Смеятьс...   Jun 22 2016, 12:54
||||- - Obam   Цитата(scifi @ Jun 22 2016, 16:54) Ну, зн...   Jun 22 2016, 14:37
||||- - scifi   Цитата(Obam @ Jun 22 2016, 17:37) Смайлик...   Jun 22 2016, 17:08
||||- - Obam   Цитата(scifi @ Jun 22 2016, 21:08) Слив з...   Jun 23 2016, 08:12
|||- - GetSmart   Цитата(scifi @ Jun 22 2016, 12:51) Bit-ba...   Jun 22 2016, 18:03
|||- - scifi   Цитата(GetSmart @ Jun 22 2016, 21:03) Мож...   Jun 22 2016, 18:08
|- - ViKo   Цитата(Влад Р. @ Jun 22 2016, 10:16) Пояс...   Jun 22 2016, 08:51
- - Сергей Борщ   Может крамолу скажу, но если основной цикл пустой,...   Jun 22 2016, 09:21
|- - Влад Р.   Цитата(Сергей Борщ @ Jun 22 2016, 12:21) ...   Jun 22 2016, 09:51
- - GetSmart   Те же лицензиаты издавали рекламные обзоры, из кот...   Jun 22 2016, 18:19
|- - scifi   Цитата(GetSmart @ Jun 22 2016, 21:19) Ког...   Jun 22 2016, 19:28
||- - GetSmart   Цитата(scifi @ Jun 22 2016, 23:28) Ой, да...   Jun 22 2016, 21:32
||- - GetSmart   Прошу прощения за отклонение от темы беседы. Но по...   Jun 24 2016, 15:58
|- - Obam   Цитата(GetSmart @ Jun 22 2016, 22:19) … B...   Jun 23 2016, 08:27
|- - GetSmart   Цитата(Obam @ Jun 23 2016, 12:27) Справед...   Jun 23 2016, 10:20
- - Влад Р.   Появилась новая проблема - написание обработчика п...   Jun 23 2016, 05:52
|- - Forger   Цитата(Влад Р. @ Jun 23 2016, 08:52) Появ...   Jun 23 2016, 08:12
- - ViKo   ЦитатаИзмените переменные на 32-битовые. Везде, гд...   Jun 23 2016, 08:19
- - Влад Р.   Цитата(Forger @ Jun 23 2016, 11:12) Абсол...   Jun 23 2016, 08:54
|- - scifi   Цитата(Влад Р. @ Jun 23 2016, 11:54) Заме...   Jun 23 2016, 09:13
||- - Влад Р.   Цитата(scifi @ Jun 23 2016, 12:13) Кстати...   Jun 23 2016, 09:33
|||- - Forger   Цитата(Влад Р. @ Jun 23 2016, 12:33) В да...   Jun 23 2016, 09:54
||- - jcxz   Цитата(scifi @ Jun 23 2016, 15:13) Такой ...   Jun 23 2016, 10:17
||- - Forger   Цитата(jcxz @ Jun 23 2016, 13:17) Даже ОС...   Jun 23 2016, 10:34
||- - jcxz   Цитата(jcxz @ Jun 23 2016, 16:17) Наприме...   Jun 23 2016, 10:34
|- - Forger   Цитата(Влад Р. @ Jun 23 2016, 11:54) По-м...   Jun 23 2016, 09:26
- - ViKo   Что-то не впечатляет результат... Надо бы не прост...   Jun 23 2016, 09:13
- - Влад Р.   Цитата(jcxz @ Jun 23 2016, 13:17) Наприме...   Jun 23 2016, 11:15
|- - jcxz   Цитата(Влад Р. @ Jun 23 2016, 17:15) Сейч...   Jun 23 2016, 13:24
- - Влад Р.   Цитата(jcxz @ Jun 23 2016, 16:24) Я уже В...   Jun 23 2016, 13:54
|- - Obam   Цитата(Влад Р. @ Jun 23 2016, 17:54) Опис...   Jun 23 2016, 14:25
|- - scifi   Цитата(Влад Р. @ Jun 23 2016, 16:54) Може...   Jun 23 2016, 14:26
|- - IJAR   http://electronix.ru/forum/index.php?showt...869...   Jun 24 2016, 12:57
- - Влад Р.   Цитата(scifi @ Jun 23 2016, 17:26) Могу: ...   Jun 24 2016, 13:46
|- - jcxz   Цитата(Влад Р. @ Jun 24 2016, 19:46) При ...   Jun 24 2016, 20:25
|- - GetSmart   Цитата(jcxz @ Jun 25 2016, 00:25) Хотя вс...   Jun 25 2016, 02:07
- - Obam   IARом пользуетесь? Тогда "IAR C/C++ Developme...   Jun 24 2016, 13:56
- - Влад Р.   Цитата(Obam @ Jun 24 2016, 16:56) IARом п...   Jun 24 2016, 14:00
- - Влад Р.   Цитата(jcxz @ Jun 24 2016, 23:25) Нет. За...   Jun 24 2016, 21:18
|- - jcxz   Цитата(Влад Р. @ Jun 25 2016, 03:18) В Re...   Jun 27 2016, 04:57
- - Влад Р.   Цитата(GetSmart @ Jun 25 2016, 05:07) Пос...   Jun 25 2016, 04:15
- - GetSmart   Цитата(Влад Р. @ Jun 25 2016, 08:15) Что-...   Jun 25 2016, 15:38
- - Влад Р.   Цитата(jcxz @ Jun 27 2016, 07:57) Обычно ...   Jun 27 2016, 12:05
|- - Сергей Борщ   QUOTE (Влад Р. @ Jun 27 2016, 15:05) Сбро...   Jun 27 2016, 12:51
|- - jcxz   Цитата(Влад Р. @ Jun 27 2016, 18:05) Тут ...   Jun 27 2016, 14:03
- - Влад Р.   Цитата(Сергей Борщ @ Jun 27 2016, 15:51) ...   Jun 27 2016, 13:12
- - ViKo   КодCMP R0, #3; Compare input to maximum valid choi...   Jun 27 2016, 14:12
|- - jcxz   Цитата(ViKo @ Jun 27 2016, 20:12) MULS R0...   Jun 27 2016, 15:22
|- - ViKo   Цитата(jcxz @ Jun 27 2016, 18:22) Однако ...   Jun 27 2016, 15:41
- - Влад Р.   Цитата(jcxz @ Jun 27 2016, 17:03) Не поня...   Jun 27 2016, 15:27
- - jcxz   Цитата(Влад Р. @ Jun 27 2016, 21:27) На с...   Jun 27 2016, 15:59


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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 13:52
Рейтинг@Mail.ru


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