Посоветуйте, пожалуйста по оформлению функции на Си (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Беня 28 марта 2003 г. 19:45

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

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru