[an error occurred while processing this directive]
Ну, понятно! Только это работает не всегда! Если Вы имеете большие проекты (>25 k) на процессорах 51RX (51RX2) c 2-мя DPTR то компиляция через исходник приводит к огромному кол-ву ERROR и WARNING.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено New__body 23 декабря 2002 г. 01:58
В ответ на: Ответ: отправлено Elektronik 22 декабря 2002 г. 22:52

Мы имееем генерацию команд типа

XCH A,DPH (DPL)

в которых ассемблер не понимает, что такое DPL и DPH, т.к.
процессор имеет 2 DPTR, а компилятор генерит текст DPL и DPH.
А ассемблер понимает при этом только DP0L и DP0H или DP1L и DP1H

Пример:
00B0 1489 XCH A,DPH
*** ___________________________________________^
*** ERROR #A45 IN 1489 (main8kan.src, LINE 1489): UNDEFINED SYMBOL (PASS-2)


Но это пол-беды. Такая вот штука вылечит:

#pragma asm
$include dpl_dph.inc
#pragma endasm


Главная беда в том, что мы имеем некорректный *.OBJ на который жутко ругается линкер.

Пример:

...

*** ERROR L107: ADDRESS SPACE OVERFLOW
SPACE: DATA
SEGMENT: ?DT?_RASCHET_PID?MAIN8KAN
LENGTH: 000BH

*** ERROR L107: ADDRESS SPACE OVERFLOW
SPACE: DATA
SEGMENT: ?DT?_NUMTABLIC?MAIN8KAN
LENGTH: 0006H

*** ERROR L107: ADDRESS SPACE OVERFLOW
SPACE: DATA
SEGMENT: ?DT?_RASCHETIU?MAIN8KAN
LENGTH: 0006H
...

*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: ?C?LSTKPDATA
MODULE: main8kan.obj (MAIN8KAN)

*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: ?C?IMUL
MODULE: main8kan.obj (MAIN8KAN)

...


При этом без генерации SRC файла проект компилится и работает нормально.

Резюме - если задумал использовать "#pragma asm" то буть готов к головной боли при переводе программы на другие процессоры.

Самый проверенный временем прием ассемблерных вставок - подключение к проекту модуля *.A51, в котором как "public" объявляем любую функцию. Это годами проверенный способ еще с DOS-овских Keil-лов. Главное, при переходе на другую модель процессора - нет головняка, а код генерится обычный ассемблерный. Для 51-х с малым объемом памяти программ (51,52,53) очень рекомендую HT-TECH C51. Вот где раздолье ассемблиристу, только знай ставь где попало #asm ... #endasm или asm(...). Малость глючный HT-TECH, да и все небезгрешны.

Надеюсь, обьяснил причины нелюбви к "#pragma asm" и борьбу с этим. А если кого обидел так ПРОШУ ПРОЩЕНЬЯ. НЕ СО ЗЛА. Просто с этим "#pragma asm" попадал очень часто в неприятности. Ну и зуб на это имею!!!

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

Ответы



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

E-mail: info@telesys.ru