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

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

Отправлено Беня 29 октября 2002 г. 16:02
В ответ на: Мои впечатления. отправлено John 29 октября 2002 г. 15:18

генерирует код для функций компилятор и делает obj-файлы. А размещает в памяти и проставляет адреса для переменных и функций линкер и генерирует hex-файл (или другой формат). Линкер не может увеличить/уменьшить/оптимизировать код - код уже сгенерирован компилятором, а линкер только "связывает" obj-файлы в выходной файл. Поэтому такой оптимизации как перемещение не может быть при классической схеме компилятора (когда C-исходники компилируются компилятором, делаются obj-файлы, а линкер "связывает" obj-файлы и генерирует исполняемый файл).
И еще - по поводу перехода через страницу. Если Вы пишете на асме, то там можно переходить через страницу. Но если вы пишете на Cи, то компилятор не может знать, где же будет переход через страницу (на каком операторе), потому как это определится только на этапе линковки. Поэтому он не может сгенерировать код, который бы корректно работал при переходе через страницу (например, если у вас цикл на границе страниц, то при переходе с конца цикла в начало надо перед переходом знать, а на какую страницу будет переход). Поэтому компилятор генерирует для функций код, который должен располагаться в одной странице ПЗУ, а линкер размещает этот код так, чтобы функция не переходила через страницу.
Правда, линкер может быть тупым - лепить подряд код функции в порядке сборки obj-файлов, а может быть умным - если не хватает ПЗУ если лепить все подряд, то попробовать перетасовать функции в зависимости от длины кода так, чтобы было меньше "дырок" (а дырки бывают потому, что функции должны быть распиханы по страницам целиком) и возможно при этом хватит ПЗУ.

А вообще-то HI-TECH для PIC IMHO очень крут. Но ошибки есть - я даже им написАл, а они не исправили :-(((

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

Ответы



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

E-mail: info@telesys.ru