CMSIS2000  0.0.7
 Указатель Структуры данных Файлы Функции Переменные Определения типов Перечисления Элементы перечислений Макросы Группы Страницы
Использование CPP в настройке проекта

Так как ресурсы микроконтроллера не велики, основным методом настройки программного обеспечения под конкретную плату, конкретную архитектуру является использование препроцессора (CPP – C PreProcessor).

Есть несколько стандартных приёмов в использовании препроцессора:

  • Условная компиляция. Используется для выбора одного из нескольких вариантов реализаций исходного кода что включаются в программу. В частном случае реализуется выбор одного из двух вариантов исходного кода или ещё проще – выбор включения или исключения исходного кода:
    • позволяет сократить исходный код, убрать/вставить только нужный приложению код
    • позволяет сократить дерево разбора if else если во время компиляции результат заранее известен
    • позволяет вызывать вместо одних функций другие в зависимости от необходимого результата
    • позволяет игнорировать некоторые переменные при вызове функции-макроса
    • позволяет вставлять в исходный код дополнительные отладочные функции, которые при выпуске финальной версии программы убираются (напр: ASSERT)
      #ifndef _DRiCONFIG_H_
      #define _DRiCONFIG_H_ 1
      #define DRi_UART 1
      #define DRi_UART_NXP2xxx0 (DRi_UART && 1)
      #define DRi_UART_NXP2xxx3 0
      #endif /* _DRiCONFIG_H_ */
  • Макроподстановка констант и формул вычисления. Используется для настройки конкретных величин в программе:
    • заменяет константы, что иногда не требует выделения памяти
    • позволяет вычислять некоторые значения во время компиляции, что позволяет избегать громозкой операции деления Примеры: Частота кварца и формулы, вычисляющие константы для стандартных скоростей UART
      #define DRI_TTYS_DEFAULT_BAUDERATE 115200
      #define DRI_CLOCK_COUNTER (CPU_FREQ/16/DRI_TTYS_DEFAULT_BAUDERATE)

Cуществует несколько способов подставить те или иные определения препроцессора (#define) в проект:

  • В командной строке указать ключ -Dsome_define=1
  • В командной строке указать список директорий для заголовочных файлов(ключ -I../port_dir), с тем чтобы в проект попали именно те определения, в случае если в проекте есть несколько заголовочных файлов с одинаковым именем
  • В проекте завести один или несколько заголовочных файлов – объявить их файлами конфигурации и вставлять их в каждый компилируемый файл, что берётся за правило

Помимо использования препроцессора есть ещё один метод настройки проекта – включение и исключения исходных *.с *.сpp файлов из компиляции и линковки, данный способ настройки должен определяться системой сборки, котороая опять-таки настраивается в некотором файле.

В хорошо организованном проекте должны существовать несколько отдельно выделеных конфигурационных файлов.

Другие страницы