4.4.1. Опции компилятора

(Руководство разработчика по микроконтроллерам семейства HCS08)

Компилятор C для HCS08 имеет ряд специальных опций, которые позволяют минимизировать генерируемый исполняемый код программы, а также уменьшить время исполнения программы:

-Cniзапрещает представление в двухбайтном формате однобайтных констант. В соответствии со стандартом ANSI целочисленные константы представляются для компилятора как переменная типа integer. Соответственно и действия с этой константой будут совершаться в двухбайтном формате. Поэтому, если в программе необходимо сравнить переменную char с некоторым константным значением, то переменная сначала автоматически будет приведена к формату integer и только затем будет выполнено сравнение двух двухбайтных переменных. Эти действия занимают лишнее время и лишнюю память. Применяя опцию -Cni, можно отменить двухбайтное представление констант, если они могут быть представлены в однобайтном формате.
-Ccразмещает константные значения в постоянной памяти МК, снижая тем самым требования по объему для ОЗУ. Следует помнить, что для реализации этой опции файл конфигурации компоновщика *.prm должен иметь запись для сегмента ROM_VAR.
-Oiразрешает вставлять в исполняемый код программы непосредственно код функции вместо кода вызова этой функции. Такое решение сокращает время исполнения программы, но увеличивает размер исполняемого кода. Для указания, какую функцию использовать без вызова, служит также директива компилятора #PRAGMA INLINE. Также имеется возможность указать максимальный размер кода функции, которая по директиве #PRAGMA INLINE будет непосредственно вставляться в код.
-Orпредписывает компилятору размещать как можно большее число локальных переменных в регистрах центрального процессора. В этом случае время исполнения программы существенно уменьшается. Но для HCS08 данная опция практически бесполезна, поскольку процессорное ядро HCS08 имеет очень мало регистров в составе ЦП.
-Cuпредписывает компилятору генерировать линейный код вместо циклического. Например, на C записан следующий фрагмент
int a,b;
a = 1
for (b = 0, b ≤ 3, b++) a += b;
При применении рассматриваемой опции будет сгенерирован код:
a += 1;
a += 2;
a += 3;
b = 3;
-Mtназначает модель памяти tiny.
-Msназначает модель памяти small.
-Mbназначает модель памяти banked.

Электронные компоненты Freescale >>>
Подробнее о компании Freescale >>>