Для начала создаем проект, как описано у меня здесь . Не забываем сделать определенные действия, чтобы процессор не зависал. Как? читаем в моей статье здесь .
Примечание! (можно не читать)
В документации 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.
Комментариев нет:
Отправить комментарий