KEIL. Настройка проекта (вкладка С/C++)

MDK-ARM C/C++ компилятор

Сегодня рассмотрим настройки проекта, вкладка C/C++ в опциях таргета или файлов.

Вот она:

Preprocessor Symbols (символы препроцессора)

Define

Устанавливает символы препроцессора которые могут быть проверены директивами #if, #ifdef и #ifndef. Имена копируются в код так же как они написаны (чувствительны к регистру). Опционально, каждое имя может получать значения.

Для примера:

Это идентично директиве препроцессора #define :

#define Check 1
#define NoExtRam 1
#define X1 1+5

  • Параметры поля Define переводятся в параметр командой строки -Doption.
  • Для определения X2 без установки значения, введите -DX2 = в поле Misc Controls.

 

Undefine

Очищает предыдущие определения, которые вводятся в диалоговом окне верхнего уровня Настройки для группы…

Language / Code Generation (Язык/Генерация кода)

Execute-only Code (Только исполнение кода)

Генерирует код execute-only (только исполнение) и предотвращает компилятор от генерации данных которые могут иметь доступ в секцию кода. Создает код, который не имеет Literal pool встроенных в секции кода, следовательно, только инструкции для чтения из памяти  разрешены принудительно (защищает программное обеспечение).

Ограничения:

  • C код.
  • Thumb код.
  • Устройства на базе Cortex-M3 и Cortex-M4.
  • armcc компилятор версии 5.04 и выше.

Флаг аналогичен параметру командной строки компилятора  —execute_only

Optimization (Оптимизация)

Настройка оптимизации компилятора для генерации кода.Устанавливает параметр командной строки -Onum :

  • Default: Использует настройку по умолчанию или настройки верхнего уровня для таргета или группы.
  • Level 0 (-O0): Выключает все оптимизации, делает некоторые простые изменения кода.
  • Level 1 (-O1): Выключает оптимизации которые ухудшат понимание в окне отладки.
  • Level 2 (-O2): Высокая оптимизация кода (уровень по умолчанию). Понимание в окне отладки может быть менее удовлетворительным, так как отображение объектного кода в исходный код не всегда понятно.
  • Level 3 (-O3): Максимальная оптимизация кода. Обратите внимание, что 3 уровень в комбинации с флагом Optimize for Time может генерировать чуть больше код чем 2 уровень, это связано с тем что уровень может раскрывать циклы в линейный код.

Optimize for Time (Оптимизация времени выполнения)

Сокращает время выполнения кода за счет большего размера кода. Флаг для командной строки -Otime .Если флаг не включен, компилятор предполагает параметр -Ospace .

Split Load and Store Multiple (Разделение инструкций загрузки и хранения на несколько)

Говорит компилятору разделить LDM и STM инструкции на две или более LDM и STM инструкции для уменьшения задержки при обработке прерывания. Когда LDM/STM содержит больше 5 регистров процессора генерируются  несколько LDM / STM инструкций. Параметр для командной строки —split_ldm .

One ELF Section per Function (Один раздел ELF на функцию)

Создает один раздел ELF для каждой функции в исходном файле. Выходные секции названы с тем же именем, что и функция, которая генерирует секцию. Позволяет оптимизировать код или найти каждую функцию по отдельным адресам памятиПараметр для командной строки —split_sections.

Strict ANSI C (Соответствие стандарту ANSI C)

Проверяет строгое соответствие исходных файлов стандарту ANSI CПараметр для командной строки —strict.

Enum Container always int (Enum контейнер всегда int)

Если отключен, типы данных контейнера для  enum оптимизированы согласно диапазону значений. Если включен, тип данных контейнера enum всегда signed intПараметр для командной строки —enum_is_int. Обратите внимание на параметр —interface_enums_are_32_bit , он помогает обеспечить совместимость между внешними интерфейсами кода, что касается размера перечисляемых типов.

Plain Char is Signed (Обычный Char как Signed)

Говорит компилятору обработать все переменные char как signed charПараметр для командной строки —signed_chars.

Read-Only Position Independent (ROPI)

Создает позиция-независимый код для доступа к константам (ROM). Это относится ко всему, что имеет Read-Only на выходе в ELF из линковщика. Обратите внимание, что это включает в себя константные данные и инициализированные данные, т.е. обычно все, что помещается в FLASH. Параметр для командной строки —apcs=/ropi .

Read-Write Position Independent (RWPI)

Создает позиция-независимый код для доступа к переменным (RAM). Это относится ко всему, что является Read-Write на выходе в ELF из линковщика.

Параметр для командной строки —apcs=/rwpi .

Warnings (Предупреждения)

Включает генерацию предупреждающих сообщений. По умолчанию unspecified, который по умолчанию All Warnings. Выбор No Warnings устанавливается параметром командной сроки  -W .

Thumb Mode (Thumb режим)

Выбор режима Thumb или ARM код для файла или группы файлов. Примечание: в диалоге Target, устанавливается по умолчанию.

No Auto Includes

Подавляет все C/C++ пути которые включены автоматически во время компиляции. Системные файлы, например, stdio.h, не зависят от настроек данного окна. Компилятор автоматически включает пути которые могут быть просмотрены в поле Compiler control string.

C99 Mode (С99 режим)

Компилятор компилирует C код, как определено в стандарте 1999 C и добавлений :

  • ISO/IEC 9899:1999. The 1999 International Standard for C.
  • ISO/IEC 9899:1999/Cor 2:2004. Technical Corrigendum 2.

Параметр для командной строки —c99 .

Include Paths (Включаемые пути)

Позволяет добавить один или несколько (разделенных запятой) путей для поиска заголовочных файлов. Для примера, для #include «filename.h» компилятор ищет сначало  в текущей, а затем в папке исходного файла. Когда это не удается или когда #include используется, используются пути указанные в поле Include Paths. Когда и здесь не удается найти файл, тогда используются пути определенные в поле INC в ProjectManageProject Items.

Misc Controls (Дополнительное управление)

Укажите любую директиву, для которых нет индивидуального диалога управления. Например, чтобы изменить язык сообщений об ошибке на японский язык Show Japanese Messages.

Compiler control string

Отображает текущие директивы в командной строке компилятора. Выполните скроллинг поля вниз, чтобы просмотреть все директивы.

sticker

 

 

 

Оставить ответ