|
Пишу под AVR Mega128 на IAR C. Ситуация : в избытке ПЗУ, ОЗУ, но стоит кварц с низкой частотой. Используются прерывания, для них написаны обработчики. В обработчиках прерывания иногда приходится выполнять одну и ту же последовательность некоторых действий. Эту последовательность я оформил в виде функций. Но когда я из обработчика прерывания вызываю функцию, то компилятор при входе в обработчик начинает сохранять все регистры, а потом при выходе их все и восстанавливает (он глубоко прав, потому что он не знает, какие регистры запортит функция). Меня это не устраивает, потому что сохранение всех регистров занимает много времени. Если я везде вместо функции просто вставляю ее содержимое, то код генерируется хороший (с сохранением только реально изменяющихся регистров), но при малейшем изменении в функции мне надо проходить по всему тексту программы, смотреть и изменять во всех местах, где встрецается эта функция, а это очень неудобно и чревато ошибками. Что можете посоветовать ? Вроде бы стандарт языка Си предусматривает функции, которые при компиляции просто подставляются, а не вызываются с помощью ассемблерной команды CALL (по-моему, они называются inline-функциями). Но реализовано ли это в IAR C EW228a ? Или может сделать функцию в виде #define ?
E-mail: info@telesys.ru