Области действия переменных и подпрограмм 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Области действия переменных и подпрограмм



Любой объект, который объявляется в программе, написанной на языке программирования C‑51, имеет область действия. В языке программирования C область действия объекта распространяется на всю программу, то есть любой объект является глобальным.

К объектам запрещено обращение до того, как они будут объявлены, поэтому при обращении к объекту, объявленному в другом программном модуле этот объект должен быть объявлен в данном программном модуле как external. Например:

 

extern char code ERROR []; /*Строка сообщения об ошибке */extern struct mrec current; /* Текущее измерение */extern struct interval setinterval; /* Значения установленных интервалов */extern struct interval counter; /* Счетчик интервалов */

При использовании внутри модуля переменной, уже объявленной в другом модуле, могут возникнуть проблемы при связывании программы. Если использование переменной с тем же именем, что и в другом модуле делает программу более наглядной, то можно в одном из модулей (или во всех сразу) с атрибутом static.

Например:

 

static int i; //Глобальная переменная, недоступная из других модулей //(а значит и не мешающая им) void tmp(void){i=5;}

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

Локальные переменные существуют только в пределах структурного оператора. Если внутри структурного оператора были присвоены локальным переменным какие-то значения, то не следует ожидать, что вернувшись снова в этот оператор, переменные сохранят присвоенные ранее или вычисленные значения.

Пример 1:

Пример 2:

В случае, если требуется сохранить значение переменных и при повторном вхождении в подпрограмму или структурный оператор, эту переменную необходимо объявить с атрибутом static.

Например:

 

void tmp(void){static int i=5;}

То же самое относится и к подпрограммам. Если требуется объявить подпрограмму, которая не должна быть видна из других модулей, то ее необходимо объявить с атрибутом static. Это кроме прочего приведет к тому, что если эта подпрограмма не используется и в данном модуле, то она просто не будет транслироваться и занимать место в памяти программ. Пример объявления подпрограммы с атрибутом static:

 

static void tmp(void){i=5;}

Иногда требуется локальные переменные хранить не в одних и тех же ячейках памяти, а в стеке. Это требуется, например, при вызове подпрограммы самой из себя. В таком случае подпрограмма должна быть объявлена как reentrant.

Теперь, после краткого знакомства с языком программирования С‑51, давайте познакомимся с процессом написания программ. Как уже мы упоминали в начале книги, программы пишутся в интегрированной среде программирования. Знакомству с такой средой программирования и будет посвящена следующая часть книги.

 

 

Глава 23. Язык программирования ASM‑51

Язык программирования АSM‑51поддерживает модульное написание программ. Графическое изображение процесса разработки программы на языке программирования ASM-51 приведено на рис. 23.1.

Рис. 23.1. Схема процесса написания программы на языке программирования ASM-51

Файл, в котором хранится программа, написанная на языке АSM‑51 (исходный текст программы), называется исходным модулем. Его можно создать, используя любой текстовый редактор. Для файла исходного текста программы принято использовать следующие расширения: asm, a51, srs, s51.

Получить объектный модуль можно, указав имя исходного модуля программы в качестве параметра вызова программы-транслятора в DOS-строке или строке командного файла:

asm51.exe modul.asm

Получить исполняемый модульпрограммы можно, указав все имена объектных модулей программы в качестве параметров вызова программы-редактора связей в DOS-строке или строке командного файла:

bl51.exe main.obj, modul1.obj, modul2.obj

Имя исполняемого модуля программы по умолчанию совпадает с именем первого объектного файла в списке параметров строки запуска редактора связей. Исполняемый модуль программы записывается в файл c именем, но без расширения.

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

Загрузочный модуль программы можно получить при помощи программы-преобразователя oh.exe, передав ей при вызове в качестве параметра имя файла исполняемого модуля, например:

oh.exe main

Рис. 23.2. Пример системы отладки программного обеспечения для микроконтроллеров.

После того, как программные модули успешно оттранслированы, размещены по конкретным адресам и связаны между собой, для отладки программы можно воспользоваться внутрисхемным эмулятором. Это инструментальное средство позволяет отображать переменные программы на дисплее персонального компьютера и оказывает значительную помощь при отладке программ непосредственно на разрабатываемой аппаратуре. Необходимое для отладки программ оборудование показано на рис. 23.2. Отдельные участки программы могут быть отлажены и при помощи специальных программ-отладчиков (симуляторов).

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

Тем не менее, окончательная отладка программного обеспечения для разрабатываемого устройства производится только после записи загрузочного модуля в память микроконтроллерной системы. Именно на этом этапе находятся и устраняются последние ошибки, допущенные при написании программы.



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 208; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.37.68 (0.005 с.)