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