Ответ: manual, p129
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено blackbit 30 января 2003 г. 17:15
В ответ на: Ответ: Ничего страшного отправлено blackbit 30 января 2003 г. 16:35

"If the interrupt routine calls other functions and these functions are defined before the interrupt code in the same module, then any registers used by these functions will be saved as well. If the called functions have not been seen by the compiler, a worst case scenario is assumed and all registers and objects will be saved.

HI-TECH C does not scan assembly code which is placed in-line within the interrupt function for register usage. Thus, if you include in-line assembly code into an interrupt function, you may have to
add extra assembly code to save and restore any registers or locations used."

Когда VideoRamUpdate() вызывается как extern, то линкеру труднее
найти память под сохранение контекста, поскольку теперь приходится
сохранять гораздо больше. Если понатыкано абсолютной адресации,
то труднее вдвойне.
Внутри VideoRamUpdate() лучше не раскидываться, а делать только самое необходимое и как можно
компактней, не вызывать из нее другие функции. Можно использовать ассемблер на этом участке и взять все на себя (неплохой вариант,
но трудоемкий), но я обошелся без него.

Маленький совет:
Такие вещи надо делать в первую очередь, чтобы сразу определить
занимаемые ресурсы, "ужаться" насколько можно; и не хвататься потом
за голову под окончание проекта.

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

Ответы



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

E-mail: info@telesys.ru