Нравится? Делимся информацией!

пятница, 1 февраля 2013 г.

TMS320F28335: увеличиваем производительность стандартных функций заменой rts2800_fpu32 на rts2800_fpu32_fast_supplement



Для начала создаем проект, как описано у меня здесь . Не забываем сделать определенные действия, чтобы процессор не зависал. Как? читаем в моей статье здесь .

Примечание! (можно не читать)
В документации sprs439m в разделе 6.18 Migrating Between F2833x Devices and F2823x Devices дается первая подсказка:

“Consider using the C28x FPU Fast RTS Library (literature number SPRC664) for high-performance floating-point math functions such as sin,
cos, div, sqrt, and atan. The Fast RTS library should be linked in before the normal run-time support library.”

Поиск по запросу “C28x FPU Fast RTS Library” выдает такой документ C28x Floating Point Unit   fastRTS Library   (это версия 2010 г, а
старая версия 2008 года по ссылке sprc664 ) и еще обсуждение на форуме . Там перенаправляют в другую ветку форума .


Итак ,к делу. Исходя из вышеприведенных ссылок и документов была выработана и опробована последовательность действий.

Для того, чтобы заполучить библиотеку C28x FPU Fast RTS Library (она наз-ся rts2800_fpu32_fast_supplement.lib) надо установить ControlSuite (ссылка на закачку). После установки она будет находиться в C:\TI\controlSUITE\libs\math\FPUfastRTS\V100  директории.



В Code Composer Studio v.3.3 основные шаги следующие:
1)  Из папки C:\ti\controlSUITE\libs\math\FPUfastRTS\V100\lib копируем библиотеку rts2800_fpu32_fast_supplement.lib в рабочую папку проекта. У меня получилось что-то типа:







2) Добавляем  fastRTS  (и если еще не добавили,то и RTS) библиотеку:   Project → Add Files to Project .
На выходе получаем:




После добавления библиотек они становятся доступны для выбора очередности линковки (производится в Build Options)
3) Project → Build Options

4) Во вкладке  Build Options → Linker → Advanced выбрать опцию линковщика  “ –priority” (Resolve Symbols to First Library - Это заставит линковщик в случае конфликтов имен двух библиотек решать в пользу символов из первой линкуемой библиотеки”)
Т.е. мы подменяем стандартную библиотеку rts2800_fpu32.lib, точнее отдельные функции в ней, более быстрыми функциями из библиотеки rts2800_fpu32_fast_supplement.lib, которая теперь должна стоять первой в очередности линковки.

5) Заходим во вкладку Build Options → Link Order. Выбираем две наши библиотеки и добавляем их к списку подключаемых объектов.
Используя стрелки вверх/вниз добиться должно расположения: то, что стоит выше в списке, линкуется первее. 




6) Build Options → Linker → Libraries  обозначить путь к  Fast RTS library (т.е. к rts2800_fpu32_fast_supplement.lib ) в Search Path (-i) 




Примечание! В данном конкретном случае не стоит добавлять библиотеки к проекту через поле Incl.Libraries(-I) . Иначе могут возникнуть проблемы при изменении порядка линковки, т.к. CCStudio использует и поле Incl.Libraries(-I)  и вкладку “link order” для определения порядка линковки.

7) Сохраняем проект Project → Save

Все! на этом Все!

Cобираем заново проект, загружаем в прибор, профилируем код и удивляемся быстроте работы функций.
Результаты проверки производительности нескольких стандартных функций можно посмотреть в статье Сравнение производительности стандартных функций из rts2800_fpu32 и rts2800_fpu32_fast_supplement библиотек  .

Примечание! Если Вы используете в проекте функции, которые не относятся к стандартной Run_Time Support Library (rts2800_fpu32.lib), то нужно еще подцепить к проекту  файл #include "C28x_FPU_FastRTS.h" ( C:\ti\controlSUITE\libs\math\FPUfastRTS\V100\include ) , который подключаем после  <math.h>.  Эти специальные функции:

float32 isqrt(float32 X);
void sincos(float32 radian, float32* PtrSin, float32* PtrCos);

Для них и требуется C28x_FPU_FastRTS.h (т.е. этих функций нет в библиотеке rts2800_fpu32.lib ).
После подключения C28x_FPU_FastRTS.h линковщик может при сборке проекта запрашивать некоторые asm-файлы реализации деления (div_f32.asm), вычисления квадратного корня ( sqrt_f32.asm ) и т.д. и т.п. Ищем их в: C:\ti\controlSUITE\libs\math\FPUfastRTS\V100\source.


Комментариев нет:

Отправить комментарий