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

вторник, 15 января 2013 г.

Создание проекта в CCS v3.3 со сложной структурой папок

         Хорошо, когда проект настроен так, что в любом месте жесткого диска, где бы он ни хранился, мы могли бы спокойно его запускать. Для этого нужно в настройках проекта использовать относительные пути к файлам вместо абсолютных.


Создаем новый проект:
1) Project →  New.





.

2) Создаем каталоги cmd, include, lib, src :


3) Создаем/разбрасываем по папкам новые/существующие исходники, заголовочные файлы, библиотеки, cmd-файлы.

4) Добавляем файлы к проекту. Project → Add files to Project …


Примечание.    Существует два способа добавления rts2800_fpu32.lib (не забываем, что я описываю TMS320F28335):
a) Linker → Libraries → Incl. Libraries (-l): rts2800_fpu32.lib   - тогда эта библиотека возьмется из стандартного пути

b) Project →  Add Files to Project  и выбрать rts2800_fpu32.lib, которая может находиться где угодно (например, в подпапке проекта под названием “lib” )
Подключение библиотеки rts2800_fpu32.lib необходимо для определения точки запуска программы – нулевого прерывания (прерывания после RESET или подачи питания) _c_int00 – специальной метки в программе. А вообще, служит для ( Q: What is the runtime library for? ):

  • ANSI/ISO C/C++ standard library
  • C I/O library
  • Low-level support functions that provide I/O to the host operating system
  • Intrinsic arithmetic routines
  • System startup routine, _c_int00
  • Functions and macros that allow C/C++ to access specific instructions
Еще информация из русскоязычного источника ( Компоненты и технологии, 2006, №8 : "Создание приложений  на базе процессоров Texas Instruments TMS320F28xx" ) для чего служит run-time support library:
а) для установки конфигурационных регистров;
б) для установки стека и вторичного системного стека;
в) для инициализации глобальных переменных (из области .cinit);
г) для вызова конструкторов глобальных объектов (.pinit);
д) для вызова функции main;
е) для вызова функции, вызывающей деструкторы глобальных объектов, после завершения main.

Какую именно из Run-time support library использовать смотрим здесь: Q: Which runtime support library should I use?


5) В опциях окна Build Options необходимо выставить параметры настройки компоновщика согласно рисунку (Stack size, Heap size под свои потребности. Heap (куча) используется для размещения объектов, динамически созданных программой, а т.к. используется С++, то она необходима):


На рисунке опции компилятора выделены синей рамкой, линковщика - зеленой. Приведу некоторые пояснения для опций в Build Options CCS.
Какие минимальные опции, чтобы запустить первый проект в Code Composer? (читаем здесь ):
Минимальные настройки С проекта на fixed-point 28x :
  • Compiler options: -v28 -ml -mt -g -pdr -w
  • a .c file with main()
  • run-time support library rts2800_ml.lib
  • Appropriate linker command file. Again the best way is to start with one provided with TI examples mentioned above.
  • Header files to facilitate programming C28x system control and peripherals.
Минимальные настройки С проекта на 28x with Floating-Point:
  • Compiler options: -v28 --float_support=fpu32 -ml -mt -g -pdr -w
  • a .c file with main()
  • run-time support library rts2800_fpu32.lib
  • Appropriate linker command file. Again the best way is to start with one provided with TI examples mentioned above.
  • Header files to facilitate programming C28x system control and peripherals.

Рекомендуемые настройки можем подсмотреть здесь: Q: What are recommended compiler options?
И наконец, последнее Q: What is "Unified Memory Model"?  -mt : “Unified memory model means that any memory block can be used as either program memory or data memory. All memory blocks including SARAM, flash, ROM, OTP and XINTF memory is unified on the 28x devices. Peripheral registers are typically only mapped to data space. Specifying unified memory model in the build options is important because it allows the compiler to generate efficient instructions like PREAD/PWRITE/MAC. The compiler will not access anything that is volatile using the program space bus (i.e. peripheral registers).©

Все опции можно посмотреть в TMS320C28x Optimizing C/C++ Compiler User's Guide : 2.3 Changing the Compiler's Behavior With Options

6) Практически все готово. Но программа не скомпилируется и не соберется, т.к. все файлы разбросаны по папкам и компилятор не знает где их искать.
Есть два пути: так называемые Absolute Path и Relative Path. Первый не особо интересен, т.к. достаточно добавить полный путь к папке include в папке проекта и проект соберется:

Но хочется, чтобы проект был переносимым, чтоб не имело значения где он хранится на жестком диске - его можно было открыть и запустить без перенастройки опций проекта.
Для Code composer studio v4 и v5 есть хорошие источники Include paths and options и Portable Projects.
Чтобы создать относительный путь к файлам нужно знать как обозначается корневая папка проекта в Code Composer ( и от нее задавать пути поиска компилятору). Для это достаточно взглянуть на рисунок:


Итак, узнали, что текущий рабочий каталог именуется как $(Proj_dir). Теперь в поле Build Options → Compiler → Preprocessor → Include Search Path (-i) добавляем $(Proj_dir)\include\ и проект соберется.


Если есть какие-то еще варианты сделать структуру папок проекта респектабельной и настройку CCS v3.3 - прошу в комментарии.

Полезные ссылки по теме:
How to make relative path in include search path relative to project or executable file in CCS3.3
Inconsistent relative include paths in CCS3.3

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

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