Курс лекций - Микропроцессоры


Многомодульные программы - часть 2


Пример объявления внешних подпрограмм на языке программирования PLM-51:

TestOZU: procedure byte external; end TestOZU; Rd558: procedure (AdrRAM,NachAdr,Nbyte) byte external; var (AdrRAM,NachAdr,Nbyte )byte; end Rd558; Wr558: procedure (AdrRAM,NachAdr,Nbyte) byte external; var (AdrRAM,NachAdr,Nbyte )byte; end Wr558;

Для того, чтобы редактор связей мог связать вызов подпрограммы из одного модуля с самой подпрограммой в другом модуле, информация об этой подпрограмме должна быть помещена в объектный модуль. Для этого подпрограмма должна быть оттранслирована с атрибутом PUBLIC. Пример определения подпрограммы, доступной для других модулей, в исходном тексте модуля:

WrNadp: procedure(i,StrPtr) public; declare StrPtr address, char based StrPtr byte constant, i byte; do while char<>0; BufInd(i)=char; StrPtr=StrPtr+1; i=i+1; end; end WrNadp; IndNom: procedure public; declare Adres byte; if BufInd(2)=0 then Adres=0; else Adres=8; if RejNab=NabTlf1 then call WrNadp(Adres,.('T1',0)); if RejNab=NabTlf2 then call WrNadp(Adres,.('T2',0)); if RejNab=NabRadA then call WrNadp(Adres,.NadpRa); if Adres=0 then call WrInd; else call InitPolnInd(2); end IndNom;

Переменные, к которым можно обращаться из других модулей, тоже должны быть объявлены с атрибутом PUBLIC.

Программа rl-51 объединяет несколько объектных файлов (модулей) в один. Для объединения нескольких модулей в исполняемую программу имена всех модулей передаются в редактор связей в качестве параметров при запуске этой программы. Пример вызова редактора связей из командной строки DOS для объединения трёх модулей:

rl51.exe progr.obj, modul1.obj, modul2.obj

В результате работы редактора связей в этом примере будет создан исполняемый модуль с именем progr.

Необходимость предварительного объявления внешних переменных и подпрограмм приводит к тому, что исходный текст программы загромождается этими объявлениями и найти собственно программу становится сложно. Кроме того при таких объявлениях возможно возникновение ошибок. Поэтому лучше вынести объявления подпрограмм и переменных в отдельные файлы, которые затем могут быть подключены в исходный текст программы директивой INCLUDE.




Начало  Назад  Вперед



Книжный магазин