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

 
 
 
Reply to this topicStart new topic
> Выполнения обработчика прерывания из ОЗУ на stm32f103
Quantum1
сообщение Nov 27 2013, 18:40
Сообщение #1


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

Группа: Участник
Сообщений: 111
Регистрация: 4-09-12
Пользователь №: 73 381



Здравствуйте!
Есть проект в котором критична производительность и большое количество прерываний, так же есть камень - stm32f103. Для того что бы не тратить драгоценные такты на ожидание чтения из флеш-памяти есть желание записать несколько самых важных обработчиков в ОЗУ и оттуда их выполнять. Но поскольку я только начинаю изучать этот проц, не совсем понимаю как это сделать ни на асме, ни на си. Примеров в сети никаких не нашел*(
Если подскажите пару примеров для Keilа будет вообще замечательно.

Спасибо!
Go to the top of the page
 
+Quote Post
kovigor
сообщение Nov 27 2013, 19:27
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Quantum1 @ Nov 27 2013, 22:40) *
Если подскажите пару примеров для Keilа будет вообще замечательно.

В хелпе Кейла или у него на сайте поищите директиву, которая размещает обработчик в ОЗУ. Я такое делал, но сходу не вспомню ...
А, вспомнил, вот ответ, в первых же сообщениях:
http://electronix.ru/forum/lofiversion/ind...hp/t108182.html

А вот статья:
http://infocenter.arm.com/help/index.jsp?t...qs/ka11306.html

Выносите обработчик в отдельный Си - файл. Дальше все просто.
Директива - это для CARM. Для RealView см. ссылки ...
Go to the top of the page
 
+Quote Post
klen
сообщение Nov 27 2013, 19:58
Сообщение #3


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(kovigor @ Nov 27 2013, 23:27) *
В хелпе Кейла или у него на сайте поищите директиву, которая размещает обработчик в ОЗУ. Я такое делал, но сходу не вспомню ...
А, вспомнил, вот ответ, в первых же сообщениях:
http://electronix.ru/forum/lofiversion/ind...hp/t108182.html

А вот статья:
http://infocenter.arm.com/help/index.jsp?t...qs/ka11306.html

Выносите обработчик в отдельный Си - файл. Дальше все просто.
Директива - это для CARM. Для RealView см. ссылки ...


есть мнение что методика проканывающая на arm7tdmi не проканает на cortex-m. дело вот в чем. в новых мк приянято много мер на выравнивание скорости выборки команд из флеша и их выполнения. ну типа сразу 128 или более бит выбирать и покрывать латентность флеша. тоесть для f103 на шьатной максимальной тактовой 72мгц флеш успевает. с другой стороны в силу гарвардовости кортексов чтение команд и обмен с озу идет по разным шинам - если все записать в озу и код и данные то они будут по одной шине тупить.
мой прогноз - быстрее работать не будет, может даже чуток медленнее или также. едиственное что можно в этом ключе попробывать - сделать обработчик бкз команд обмена с озуsm.gif с одновременным разгоном тактовой.

попробуете напишите результаты пожалуйста.
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Nov 27 2013, 21:28
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Тоже склоняюсь к такому мнению...
Go to the top of the page
 
+Quote Post
alx125
сообщение Nov 28 2013, 02:01
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 202
Регистрация: 18-05-09
Из: Novosibirsk
Пользователь №: 49 204



"...The CortexM3 processor has a total of 4 GB of address space. Program code can be located in the code region, the Static Random Access Memory (SRAM) region, or the external RAM region. However, it is best to put the program code in the code region because with this arrangement, the instruction
fetches and data accesses are carried out simultaneously on two separate bus interfaces (I-Code, D-Code)
. "

Еще цитата:
"В процессоре CortexM3 при условии, что память имеет нулевую латентность, и учитывая, что архитектура шин позволяет одновременно ocyществлять
выборку вектора и сохранение контекста проrраммы, минимальная величина задержки обработки прерывания составляет 12 тактов. Это время yxoдит на сохранение реrистров в стеке, выборку вектора и выборку первых команд обработчика прерывания. В то же время указанная величина зависит от наличия циклов ожидания при обращении к памяти и ряда друrих факторов. "

3-х уровневый конвеер "выборки-декодирования-выполнения" команд тоже оптимизирован под код из Flash.

Кроме того, при наступлении прерывания (то же относится и к возврату из обработчика), в SRAM сохраняется контекст - стековый фрейм (8 регистров) одновременно с выборкой вектора и первой исполняемой команды оброботчика. Эта "одновременность" может быть достигнута если код обработчика будет во флэш! Иначе весь обмен будет по системной шине ч/з которую подключено SRAM. Что приведет к задержкам.
Если в обработчике идет интенсивный обмен данными с SRAM, то используйте выравнивание данных иначе будут лишние такты шины.

Cortex-M3 оптимизирован для обработки прерываний с маленькой задержкой (latenсy).
Поэтому для быстрого обработчика с минимальной latency все же лучше подходит Flash, чем SRAM.
Go to the top of the page
 
+Quote Post
scifi
сообщение Nov 28 2013, 06:44
Сообщение #6


Гуру
******

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



Присоединяюсь к предыдущим ораторам.
В семействах STM32F2xx, STM32F4xx имеется Multilayer Bus Matrix, куда подключены все шины процессора и разные блоки памяти. Там можно попытаться распределить код и данные так, чтобы код выполнялся из ОЗУ с максимальной скоростью, но это ещё проверять надо. В семействе STM32F1xx шинный коммутатор гораздо проще, там нет такой возможности.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Nov 28 2013, 07:18
Сообщение #7


Гуру
******

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



Цитата(alx125 @ Nov 28 2013, 08:01) *
Поэтому для быстрого обработчика с минимальной latency все же лучше подходит Flash, чем SRAM.

А ещё лучше подходит ARM7/ARM9 wink.gif
Go to the top of the page
 
+Quote Post
adnega
сообщение Nov 28 2013, 07:48
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(jcxz @ Nov 28 2013, 11:18) *
А ещё лучше подходит ARM7/ARM9 wink.gif

У ARM7 всего одно FIQ, а ТС нужно много прерываний. С учетом "тамошнего" VIC и выигрыш не очевиден.
Только если нет вложенных прерываний и обработчики пользуются только теневыми регистрами.
Go to the top of the page
 
+Quote Post
Quantum1
сообщение Nov 30 2013, 11:34
Сообщение #9


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

Группа: Участник
Сообщений: 111
Регистрация: 4-09-12
Пользователь №: 73 381



т.е. как я понял на Cortex M3 смысла в ОЗУшном обработчике нет...

а к примеру если заменить stm32 на Altera с Сortex M1 в моем посте... будет смысл записи обработчика в ОЗУ?

Сообщение отредактировал Quantum1 - Nov 30 2013, 11:35
Go to the top of the page
 
+Quote Post
scifi
сообщение Nov 30 2013, 17:13
Сообщение #10


Гуру
******

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



Цитата(Quantum1 @ Nov 30 2013, 15:34) *
т.е. как я понял на Cortex M3 смысла в ОЗУшном обработчике нет...

Неправильно поняли. Например, в семействе STM32F2xx блок ОЗУ размером 112 Кбайт подключен к шинам I-Code, D-Code процессора Cortex-M3. Есть шансы, что оттуда будет выполняться быстрее, чем из флэш. Но надо проверять.
Go to the top of the page
 
+Quote Post
alx125
сообщение Nov 30 2013, 22:37
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 202
Регистрация: 18-05-09
Из: Novosibirsk
Пользователь №: 49 204



Цитата(Quantum1 @ Nov 30 2013, 15:34) *
т.е. как я понял на Cortex M3 смысла в ОЗУшном обработчике нет...

а к примеру если заменить stm32 на Altera с Сortex M1 в моем посте... будет смысл записи обработчика в ОЗУ?


Лучше сначала определиться с целью.
Если для stm32f103 нужна минимальная задержка при обработке прерывания , то лучше подходит Flash.
Если же цель - найти смысл размещения обработчика в SRAM, то это может понадобиться для динамичекого изменения самого обработчика в процессе работы.
Окончательное же решение должно приниматься с учетом конкретных характеристик проекта!

rolleyes.gif
Go to the top of the page
 
+Quote Post
Quantum1
сообщение Dec 1 2013, 16:40
Сообщение #12


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

Группа: Участник
Сообщений: 111
Регистрация: 4-09-12
Пользователь №: 73 381



Цитата(alx125 @ Dec 1 2013, 02:37) *
Лучше сначала определиться с целью.
Если для stm32f103 нужна минимальная задержка при обработке прерывания , то лучше подходит Flash.
Если же цель - найти смысл размещения обработчика в SRAM, то это может понадобиться для динамичекого изменения самого обработчика в процессе работы.
Окончательное же решение должно приниматься с учетом конкретных характеристик проекта!

rolleyes.gif



цель ясна и понятна - озвучена в первом посте - минимальная задержка при обработке прерывания, есть пара вариантов камней на которых требуемая задача может быть решена, все эти камни я знаю не очень глубоко по этому прошу помощи у форума. Я высказал предположение что на stm32f103 обработчик быстрее выполниться из ОЗУ - оно оказалось ошибочно. Теперь уточняю Altera Cyclone III с Cortex M1.
Go to the top of the page
 
+Quote Post
scifi
сообщение Dec 1 2013, 18:17
Сообщение #13


Гуру
******

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



Цитата(Quantum1 @ Nov 27 2013, 22:40) *
Есть проект в котором критична производительность и большое количество прерываний, так же есть камень - stm32f103. Для того что бы не тратить драгоценные такты на ожидание чтения из флеш-памяти есть желание записать несколько самых важных обработчиков в ОЗУ и оттуда их выполнять.

Вообще-то это совсем не так делается. Для начала нужно измерить, где именно и сколько именно процессорного времени не хватает. А потом уже думать, что с этим делать.
А так вы ставите телегу впереди лошади. Ничего толкового из этого не выйдет.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:54
Рейтинг@Mail.ru


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