|
|
  |
Выполнения обработчика прерывания из ОЗУ на stm32f103 |
|
|
|
Nov 27 2013, 19:27
|
Гуру
     
Группа: Свой
Сообщений: 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 см. ссылки ...
|
|
|
|
|
Nov 27 2013, 19:58
|

бессмертным стать можно тремя способами
    
Группа: Свой
Сообщений: 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мгц флеш успевает. с другой стороны в силу гарвардовости кортексов чтение команд и обмен с озу идет по разным шинам - если все записать в озу и код и данные то они будут по одной шине тупить. мой прогноз - быстрее работать не будет, может даже чуток медленнее или также. едиственное что можно в этом ключе попробывать - сделать обработчик бкз команд обмена с озу  с одновременным разгоном тактовой. попробуете напишите результаты пожалуйста.
|
|
|
|
|
Nov 28 2013, 02:01
|
Местный
  
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Nov 30 2013, 22:37
|
Местный
  
Группа: Свой
Сообщений: 202
Регистрация: 18-05-09
Из: Novosibirsk
Пользователь №: 49 204

|
Цитата(Quantum1 @ Nov 30 2013, 15:34)  т.е. как я понял на Cortex M3 смысла в ОЗУшном обработчике нет...
а к примеру если заменить stm32 на Altera с Сortex M1 в моем посте... будет смысл записи обработчика в ОЗУ? Лучше сначала определиться с целью. Если для stm32f103 нужна минимальная задержка при обработке прерывания , то лучше подходит Flash. Если же цель - найти смысл размещения обработчика в SRAM, то это может понадобиться для динамичекого изменения самого обработчика в процессе работы. Окончательное же решение должно приниматься с учетом конкретных характеристик проекта!
|
|
|
|
|
Dec 1 2013, 16:40
|
Частый гость
 
Группа: Участник
Сообщений: 111
Регистрация: 4-09-12
Пользователь №: 73 381

|
Цитата(alx125 @ Dec 1 2013, 02:37)  Лучше сначала определиться с целью. Если для stm32f103 нужна минимальная задержка при обработке прерывания , то лучше подходит Flash. Если же цель - найти смысл размещения обработчика в SRAM, то это может понадобиться для динамичекого изменения самого обработчика в процессе работы. Окончательное же решение должно приниматься с учетом конкретных характеристик проекта!  цель ясна и понятна - озвучена в первом посте - минимальная задержка при обработке прерывания, есть пара вариантов камней на которых требуемая задача может быть решена, все эти камни я знаю не очень глубоко по этому прошу помощи у форума. Я высказал предположение что на stm32f103 обработчик быстрее выполниться из ОЗУ - оно оказалось ошибочно. Теперь уточняю Altera Cyclone III с Cortex M1.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|