Полная версия этой страницы:
задание адреса функции
simpsen
Jul 1 2010, 07:21
Весь проект размещается в динамической памяти, хочу конкретную функцию оттуда переместить в sram для ускорения обработки прерываний. Можно ли это сделать исходя из возможностей самого компилятора (имеется iar 5.11) или какие существуют способы?
demiurg_spb
Jul 2 2010, 12:58
Изучайте линкер и то как помещать код в заданную пользователем секцию.
simpsen
Jul 20 2010, 11:42
спасибо, совет прекрасен
demiurg_spb
Jul 21 2010, 11:00
Для какого семейства проект?
про __ramfunc читали?
simpsen
Jul 26 2010, 07:31
читали, пробовали, но код как грузился целиком в sdram, так и грузится, выходит что-то делаю не так (( и если сделать секцию в SRAM, то все равно туда мне не удалось поместить функцию
проект для ARM9
demiurg_spb
Jul 27 2010, 17:54
Цитата(simpsen @ Jul 26 2010, 11:31)

проект для ARM9
Я тут, к сожалению, Вам не советник.
QUOTE (simpsen @ Jul 26 2010, 11:31)

читали, пробовали, но код как грузился целиком в sdram, так и грузится
А вы map файл смотрели?
все функции __ramfunc попадают в определенную секцию - вот ее в icf файле и надо разместить в срам.
Или нужные функции поместить в определенную секцию при помощи #pragma location/@
А в icf файле использовать initialize by copy или manually
aaarrr
Jul 27 2010, 21:33
Возможно, не совсем в тему, но: далеко не факт, что желаемое ускорение будет получено просто при переносе кода в SRAM. Гарантированный результат можно получить, если "залочить" в кэш процедуру обработки прерывания.
И к совету из #2 настоятельно рекомендую прислушаться.
simpsen
Jul 28 2010, 13:02
спасибо, KRS,с помощью initialize by copy сделала секцию и все получилось
правда как и предупреждал aaarrr, желаемое ускорение мною получено не было
Цитата(simpsen @ Jul 28 2010, 17:02)

правда как и предупреждал aaarrr, желаемое ускорение мною получено не было

А какой конкретно чип (и архитектура) 9 ARM много разных.
simpsen
Jul 29 2010, 05:24
Цитата(KRS @ Jul 29 2010, 00:14)

А какой конкретно чип (и архитектура) 9 ARM много разных.
конкретно AT91SAM9RL64
столкнулась с тем, что функции, описанные в *.c файлах размещаются в sram указанным выше способом, а вот как быть с функциями, написанными на ассемблере в *.s файлах? вижу что по образу и подобию их перекинуть не удается
simpsen
Jul 29 2010, 07:33
ой, этот вопрос снимается, с ним все стало понятно
Может ускорение не заметно потому что функция в кеш попадает, например если это цикл расчета и т.п.
Вы во внутренню память TCM запихали функцию?
Там еще надо TCM насторить чтобы память была доступна через ITCM.
К тому же TCM идет мимо кеша, т.к.сама по себе быстрая. В TCM имеет смысл прерывания запихивать и критические функции, только не циклы - потому что цикл из кеша прекрасно будет работать! Может поэтому и разницу в производительности не заметили?
simpsen
Jul 29 2010, 10:28
да, действительно, запихнув именно прерывания в TCM, ускорение стало заметным. Ваша теория подтверждается нашей практикой
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.