[an error occurred while processing this directive] [an error occurred while processing this directive]
Не может в принципе (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Беня 08 февраля 2002 г. 12:52
В ответ на: Вопрос по HT-PIC подскажите плз отправлено Jedi 08 февраля 2002 г. 02:35

Он организован по классической схеме - компилятор делает obj файлы, а линкер уже их слинковывает и проставляет адреса переменных. Проект может состоять из многих файлов у каждого из которых свои переменные, поэтому только линкер при связывании модулей может узнать, хватит ли в каком-то банке места или нет. Допустим, он видит, что не хватает и нужно было бы какую-то переменную поместить не в банк 0, а в банк 1. Но он уже ничего не может поделать - компилятор то не знал этого и сгенерировал код программы, в котором эта переменная в банке 0!
А, например, код для выражения "a = b ;" будет короче, если обе переменные в одно банке и длиннее, если в различных банках (т. к. нужно переключиться на нужный банк для переменной "a", прочитать ее, затем переключиться на банк для переменной "b"(это уже второе переключение) и только затем поместить в "b" результат. А если переменные в одном банке, то второе переключение делать не надо.
Поэтому линкер ничего поделать не может - он же не может "выкусить" лишний код или добавить свой в obj !
Автоматическое распределение переменных возможно только в системах (например, в дебильной глюкавой MPLABC), в которых вся программа должна быть в одном файле и там нет выделенного компилятора и линкера - а что-то смешаное.

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

Ответы



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

E-mail: info@telesys.ru