Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
37 / 31 / 5
Регистрация: 30.04.2014
Сообщений: 1,037

Скорость обработки EXTI в STM32F4

06.04.2016, 10:27. Показов 5329. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Есть ли программные возможности ускорения реакции STM32F4 на внешние прерывания?

В АРМ-ах есть такое понятие как fiq. Смотрел в стм32, такого нету.
Есть какие-либо цифры, сколько тактов проходит от возникновения прерывания (смены уровня на входе ноги) до входа в обработчик
C++
1
void EXTI1_IRQHandler(void)
?

Кто-нибудь сталкивался?

Добавлено через 8 минут
Почитал Это:
https://community.arm.com/docs/DOC-2607

Добавлено через 1 минуту
Но там только теория.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.04.2016, 10:27
Ответы с готовыми решениями:

STM32F4+ EXTI
Всем привет! Нахожусь в процессе изучения EXTI. Настроил на порт А 0 пин (там кнопка висит). Все работает. Решил проверить, что будет если...

Скорость USB в STM32F4
Опять вопрос по поводу USB в STM32F4. Каким способом достичь скорости передачи в сторону хоста >= 5Mb/sec в режиме Full-speed? С CDC не...

stm32f4 скорость записи во Flash
Подскажите как ускорить процесс записи. Стирание одного блока длится 240ms. Это нормально или можно как то ускорить? void...

18
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
06.04.2016, 10:43
Лучший ответ Сообщение было отмечено Khludenkov как решение

Решение

Время отклика на событие прерывания составляет:
12 тактов - если прерывается фоновая программа
6 тактов - если прерывается другое низкоприоритетное прерывание
18 тактов - если прерывание произошло в момент выхода из другого прерывания
2
37 / 31 / 5
Регистрация: 30.04.2014
Сообщений: 1,037
06.04.2016, 12:27  [ТС]
Это аппаратно наверное. А ведь ещё контекст фоновой программы сохранять надо? Или он автоматом сохраняется при переключении режима?

Витальич, есть ли у кортексов понятие fast interrupt?
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
06.04.2016, 12:33
Цитата Сообщение от Khludenkov Посмотреть сообщение
есть ли у кортексов понятие fast interrupt?
Думаю, вам поможет этот документ.
PS отвечая, на ваш вопрос:
да, имеет:
The Cortex-M4 processor closely integrates a configurable nested interrupt controller
(NVIC), to deliver industry-leading interrupt performance. The NVIC includes a nonmaskable
interrupt (NMI), and provides up to 256 interrupt priority levels. The tight
integration of the processor core and NVIC provides fast execution of interrupt service
routines (ISRs), dramatically reducing the interrupt latency. This is achieved through the
hardware stacking of registers, and the ability to suspend load-multiple and store-multiple
operations. Interrupt handlers do not require any assembler stubs, removing any code
overhead from the ISRs. Tail-chaining optimization also significantly reduces the overhead
when switching from one ISR to another.
это если вы об этом. Настолько глубоко этот кортекс я еще не ковырял.
2
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
06.04.2016, 12:55
Цитата Сообщение от Khludenkov Посмотреть сообщение
Или он автоматом сохраняется при переключении режима?
за эти 12 тактов он сохраняет в стеке следующие регистры:
Program Counter (PC)
Processor Status Register (xPSR)
r0-r3
r12
Link Register (LR)
Если обработчик прерывания использует регистры r4-r11, то их тоже надо сохранить.
Если такты так критичны, пишите обработчик на ассемблере. Тогда можно не трогать регистры r4-r11.

Цитата Сообщение от Khludenkov Посмотреть сообщение
В АРМ-ах есть такое понятие как fiq
Это по сути переключатель контекста. Каждый регистр имел семь или девять копий(не помню точно цифру, давно было) и при входе в прерывание можно было не сохранять контекст в стеке, а переключится на альтернативный набор регистров.
0
37 / 31 / 5
Регистрация: 30.04.2014
Сообщений: 1,037
06.04.2016, 14:00  [ТС]
Цитата Сообщение от Витальич Посмотреть сообщение
пишите обработчик на ассемблере
Ассемблерные вставки пока сложноваты. Надо будет работу с регистровыми переменными посмотреть.
0
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
06.04.2016, 14:03
Если не секрет, какую скорость реакции хотите получить?
0
37 / 31 / 5
Регистрация: 30.04.2014
Сообщений: 1,037
06.04.2016, 14:45  [ТС]
Идёт поток клоков с частотой 100 кГц. При изменении уровня на клоке надо успеть считать состояние с линии данных. Слегка модернизировать его (это быстро, 10 тактов) и выставить результат на другом пине.
Использую дискавери ф407.

Добавлено через 1 минуту
И судя по состоянию в массиве (заодно для проверки пишу в ОЗУ) не всегда успевает.
Других прерываний нет.

Добавлено через 16 минут
Т.е. при частоте 168 МГц имеем 1680 тактов на один клок. Чтобы не очень запаздывать с ответом надо хотя бы в половину вложиться. Т.е. 840 тактов. Вроде как много.

P.S. Может частота неправильно настроена, надо будет проверить...
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
06.04.2016, 15:41
Цитата Сообщение от Khludenkov Посмотреть сообщение
Идёт поток клоков с частотой 100 кГц. При изменении уровня на клоке надо успеть считать состояние с линии данных.
...то есть прерываний 200к за секунду. Так я понял?
Цитата Сообщение от Khludenkov Посмотреть сообщение
Т.е. при частоте 168 МГц имеем 1680 тактов на один клок.
ну как-то приближенно, наверное, да. Все-таки кортексы не так уж легко считать по тактам. Надо знать какие команды пойдут "конвеерно", а какие сбросятся. Но учитывая коммент выше - получается 840 команд, но не 1680.
ЗЫ: в качестве рекомендации - засуньте обрабочик прерывания в RAM. Оттуда вы сможете быстрее работать.
В M4 в этом плане чуть по-круче, чем в M3 (при беглом изучении так показалось), но в M3 у меня важный хендлер действительно стал шустрым в нагруженном приложении, когда я его загрузил в RAM.
1
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
06.04.2016, 15:55
Цитата Сообщение от Voland_ Посмотреть сообщение
засуньте обрабочик прерывания в RAM
неплохая идея, вот реализация http://we.easyelectronics.ru/S... v-iar.html с новыми F7 кстати не прокатит
Цитата Сообщение от Voland_ Посмотреть сообщение
Надо знать какие команды пойдут "конвеерно", а какие сбросятся.
для настоящих системщиков http://infocenter.arm.com/help... DIGAC.html
1
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
06.04.2016, 16:05
Цитата Сообщение от Витальич Посмотреть сообщение
с новыми F7 кстати не прокатит
почему? Они не могут выполнять из RAM инструкции?
Цитата Сообщение от Витальич Посмотреть сообщение
для настоящих системщиков
ага, вот только если бы не вот это:
P
The number of cycles required for a pipeline refill. This ranges from 1 to 3 depending on the alignment and width of the target instruction, and whether the processor manages to speculate the address early.
B
The number of cycles required to perform the barrier operation. For DSB and DMB, the minimum number of cycles is zero. For ISB, the minimum number of cycles is equivalent to the number required for a pipeline refill.
N
The number of registers in the register list to be loaded or stored, including PC or LR.
W
The number of cycles spent waiting for an appropriate event.
пока найдешь эти значения - там и черт ногу сломит. )
0
 Аватар для Витальич
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
06.04.2016, 16:14
Цитата Сообщение от Voland_ Посмотреть сообщение
почему? Они не могут выполнять из RAM инструкции?
сам не проверял, читал про это еще когда не было в продаже дискавери, писали, что шину из RAM расшили и нет смысла делать для увеличении скорости, а так работает.
Цитата Сообщение от Voland_ Посмотреть сообщение
пока найдешь эти значения - там и черт ногу сломит.
так я же писал, что для настоящих
на ARMах еще не разу не приходилось тактики считать, нет у меня таких задач.
1
37 / 31 / 5
Регистрация: 30.04.2014
Сообщений: 1,037
06.04.2016, 16:19  [ТС]
Скажите, есть хороший мануал по ассемблерным вставкам для армов-кортексов?
Компилятор от кейла или gcc.
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
06.04.2016, 17:08
Цитата Сообщение от Khludenkov Посмотреть сообщение
Компилятор от кейла или gcc.
так надо ж и раскрывать соответствующий мануал. В общем случае эти вставки всегда платформенно- и компиляторно- зависимые. По крайней мере каждый клон gcc имеет свои особенности inline assembler'а. Попробуйте что-нибудь отсюда, например: http://www.ethernut.de/en/docu... e-asm.html
Очень правдоподобно выглядит, по крайней мере...
1
06.04.2016, 17:09

Не по теме:

Нет я седел, сижу и буду сидеть на IAR. Не реклама, более убогой IDE в жизни не встречал.

0
50 / 49 / 10
Регистрация: 24.01.2010
Сообщений: 225
06.04.2016, 18:04
что то у Вас не так.
stm32f4 замечательно работает с порядком микросекунд. И таймером ещё приходится отмерять - слишком шустр. При этом фриртос, пдп, изернет, шимы, ацп, wifi, юарты и куча другого барахла - проблем не обнаружено.

У вас на 3 порядка разница! Такие вещи можно решить на соизмеримых даже таймингах. А тут запас мама не горюй...

(круглый)
1
37 / 31 / 5
Регистрация: 30.04.2014
Сообщений: 1,037
07.04.2016, 10:42  [ТС]
Цитата Сообщение от kolobok0 Посмотреть сообщение
что то у Вас не так

Да. Сделал пока поллингом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    while(1)
    {
        if((GPIOD->IDR & GPIO_PIN_0) == 0)
        {
            if(trig)
            {
                /*
                 код обработки
                */
                trig = 0;
                GPIOD->ODR |= LED_BLUE;
            }
        } else {
            trig = 1;
            GPIOD->ODR &= ~LED_BLUE;
        }
    }

Не кошерно, зато работает. Буду дальше думать.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
07.04.2016, 22:54
Цитата Сообщение от Khludenkov Посмотреть сообщение
trig = 0;
Цитата Сообщение от Khludenkov Посмотреть сообщение
trig = 1;
а чем
C
1
trig=!trig;
не устроил?
Цитата Сообщение от Khludenkov Посмотреть сообщение
GPIOD->ODR |= LED_BLUE;
Цитата Сообщение от Khludenkov Посмотреть сообщение
GPIOD->ODR &= ~LED_BLUE;
очень долгие и неатомарные решения
чтение-модификация-запись
воспользуйся возможностями STM
C
1
2
GPIOD->BRR=LED_BLUE;// нога в 0
GPIOD->BSRR=LED_BLUE; // нога в 1
Добавлено через 3 минуты
а можно вообще вот так
C
1
2
3
4
5
6
7
8
9
   while(1)
    {
        if((GPIOD->IDR & GPIO_PIN_0) == 0)
        {
 
            trig =! trig ;
            GPIOD->BSRR= LED_BLUE<<(16*trig );
        }
    }
1
37 / 31 / 5
Регистрация: 30.04.2014
Сообщений: 1,037
08.04.2016, 08:16  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
GPIOD->BRR=LED_BLUE;// нога в 0
GPIOD->BSRR=LED_BLUE; // нога в 1
Вот она, вся мощь армов.




Цитата Сообщение от ValeryS Посмотреть сообщение
trig=!trig;
trig меняется только при смене GPIOD->IDR. Надо проверить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.04.2016, 08:16
Помогаю со студенческими работами здесь

STM32F4 как уменьшить скорость SPI2
я начал осваивать STM32F4 с MAX7221 SPi2 настроений. когда циклически посылаю команду то она доходит к MAX7221. Скорее всего нужно...

STM32F4+PHY+FREERTOS+LWIP+UDP скорость
Кто-нибудь тестировал максимальную скорость передачи данных при использовании STM32F4+PHY+FREERTOS+LWIP+UDP? У меня получилось 24 Мб\с, не...

скорость обработки
Господа програмисты делаю программу и встал такой вопрос-допустим у нас есть такой код int a; a=0; for ( ; ; ) { a++ ; } ...

Скорость обработки
Добрый вечер. Столкнулся с такой проблемой, работаю с большим двумерным массивом байтового типа, то есть загружаю его в программу и...

Скорость обработки данных
Добрый день, всем. Прошу оказать помощь в вопросе оптимальной обработки данных в циклах. Ситуация следующая: Программа должна...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru