Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Трансляция программных модулей
Как уже обсуждалось в предыдущих главах, программный проект (программа) может состоять из нескольких модулей. В программном проекте, состоящем из нескольких файлов, появляется возможность нескольких видов трансляции. Прежде всего, можно оттранслировать только один файл, не транслируя остальные файлы программного проекта. Это позволяет обнаружить и исправить все синтаксические ошибки в отдельном программном модуле. При трансляции каждого программного модуля на жёстком диске формируются перемещаемый файл в объектном формате, который затем будет использоваться для создания загрузочного файла программного проекта. Этот файл называется объектный модуль. Одновременно с объектным модулем на диске формируется файл листинга программного модуля, в который помещается исходный текст программного модуля и сообщения о синтаксических ошибках. В листинге 24.1 приведен пример исходного текста, программы, написанного на языке программирования C, а в листинге 24.2 приведено содержимое файла листинга, создаваемого при трансляции этого исходного текста. Листинг 24.1. Исходный текст программы. /*========================= main.c =========================== Программа лабораторной работы №5
Проект ОБУЧАЮЩИЕ ПРОГРАММЫ Программист::::::::.. Версия 1.00 Написана::::::.
Последнее изменение::::. программы ============================================================*/
#include "ADuC812.h" //Подключить определения всех внутренних регистров ADuC812
#define ParPort 0x8 //Определить константу переключения на 8 страницу памяти
#define SvDiod *(volatile unsigned char xdata *)7 /*Переменная косвенной адресации 7 ячейки внешней памяти (светодиодов)*/
main() {DPP=ParPort; //Подключиться к параллельному порту SvDiod=1; //Зажечь светодиод номер 0
while(1) //Обеспечить зацикливание микроконтроллера { /*(чтобы не было программного сброса микросхемы */ } /*языком программирования) */ }
Листинг 24.2 Содержимое файла листинга. C51 COMPILER V7.20 MAIN 08/06/2006 23:14:21 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE MAIN OBJECT MODULE PLACED IN.\obj\main.obj COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND PRINT(.\lst\ -main.lst) PAGEWIDTH(90) OBJECT(.\obj\main.obj)
line level source
1 /*========================= main.c =========================== 2 Программа лабораторной работы №5 4 Проект ОБУЧАЮЩИЕ ПРОГРАММЫ 5 Программист::::::::.. 6 Версия 1.00 7 Написана::::::.
9 Последнее 10 изменение::::. 11 программы 12 ============================================================*/ 14 #include "ADuC812.h"//Подключить определения всех внутренних регистров ADuC812 16 #define ParPort 0x8 //Определить константу переключения на 8 страницу памяти 18 #define SvDiod *(volatile unsigned char xdata *)7 /*Переменная косвенной 19 адресации 7 ячейки внешней памяти (светодиодов)*/ 21 main() 22 {DPP=ParPort; //Подключиться к параллельному порту 23 1 SvDiod=1; //Зажечь светодиод номер 0 24 1 25 1 while(1) //Обеспечить зацикливание микроконтроллера 26 1 { /*(чтобы не было программного сброса микросхемы */ 27 2 } /*языком программирования) */ 28 1 }
MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 11 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = ---- ---- IDATA SIZE = ---- ---- BIT SIZE = ---- ---- END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
При трансляции программного модуля, написанного на языке программирования ассемблер, в листинг помещаются машинные коды команд процессора, и их адрес относительно начала программного модуля. Пример содержимого такого файла приведен в листинге 24.3.
Листинг 24. 3. Содержимое файла листинга программы, написанной на ассемблере. A51 MACRO ASSEMBLER Модуль инициализации процессора 05/24/2004 14:00:11 PAGE 1
MACRO ASSEMBLER A51 V7.01 OBJECT MODULE PLACED IN.\OBJ\init.obj ASSEMBLER INVOKED BY: F:\Keil\C51\BIN\A51.EXE init.asm NOMOD51 SET(SMALL) DEBUG PRINT(.\LST\init.lst) XREF OBJECT(.\OBJ\ init.obj) EP
LOC OBJ LINE SOURCE
1 $title (Модуль инициализации процессора) 3;========== init.asm ====================== 4;Учебная программа 5; 6;Проект Аттестационная работа 7;Программист Борисенко С. т. 66-02-86 8;Версия 1.00 9;Написана 9 апреля 2004. 10; 11;Последнее 12 апреля 2004. 12;изменение v1.00 13;программы 14;============================================================ 254 $LIST 256 _code segment code 258 public init ---- 260 rseg _code 262;-------------------------------------------- 263;ПОДПРОГРАММА ИНИЦИАЛИЗАЦИИ МИКРОКОНТРОЛЛЕРА 264;------------------------------------------- 265;настраивает таймер 0 в качестве системных часов на период 10мс 266;(Этого периода достаточно для устранения дребезга клавиатуры) 0000 268 init: 269;--- Настроить Timer 0 --------------------- 0000 758901 270 mov TMOD, #00000001b 271; | 272; ||++--Выбрать режим 16-разрядного таймера 273; |+----Использовать внутреннюю синхронизацию 274; +-----Запретить управление таймером от INT0 0003 758A94 276 mov TL0, #LOW(-(F_ZQ/12)*10);Настроить таймер
0006 758C94 277 mov TH0, #HIGH(-(F_ZQ/12)*10);на период 10мс 0009 D28C 279 setb TR0;Включить таймер 0 280;---------------------------------------------------- 282;--- Погасить светодиоды ----------------------------- 000B C293 283 clr SV1 000D C294 284 clr SV2 000F 438E01 286 orl AUXR,#1;Запретить выдачу частоты ALE на выход 287;микроконтроллера 0012 75A882 288 mov IE,#10000010b 289;| | 290;| +--Разрешить прерывания от таймера 0 291;+--------Разрешить прерывания 292;---------------------------------------------------- 0015 120000 F 294 call IndInit;Инициализировать ЖКИ дисплей 0018 22 295 ret 297 end A51 MACRO ASSEMBLER Модуль инициализации процессора 05/24/2004 14:00:11 PAGE 3
XREF SYMBOL TABLE LISTING ---- ------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES / REFERENCES AC........ B ADDR 00D0H.6 A 204# ACC........ D ADDR 00E0H A 60# ADRKLAV...... D ADDR 00A0H A 225# EA........ B ADDR 00A8H.7 A 162# ES........ B ADDR 00A8H.4 A 159# IE........ D ADDR 00A8H A 56# 288 INDINIT...... C ADDR ----- EXT 252# 294 INIT....... C ADDR 0000H R SEG=_CODE 258 268# INT0....... B ADDR 00B0H.2 A 178# INT1....... B ADDR 00B0H.3 A 179# IP........ D ADDR 00B8H A 58# P0........ D ADDR 0080H A 30# P1........ D ADDR 0090H A 52# P2........ D ADDR 00A0H A 55# 225 P3........ D ADDR 00B0H A 57# PCON....... D ADDR 0087H A 36# PSW........ D ADDR 00D0H A 59# PUTCHAR...... C ADDR ----- EXT 252# SBUF....... D ADDR 0099H A 54# SCON....... D ADDR 0098H A 53# SP........ D ADDR 0081H A 31# T0........ B ADDR 00B0H.4 A 180# T1........ B ADDR 00B0H.5 A 181# TCON....... D ADDR 0088H A 37# TMOD....... D ADDR 0089H A 38# 270 _CODE....... C SEG 0019H REL=UNIT 256# 260
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
При трансляции исходного текста программы, написанной на языке программирования высокого уровня, таком как C или PLM, программа-транслятор может быть настроена так, что она будет создавать файл с текстом исходного модуля, написанного на ассемблере или помещать операторы языка программирования ассемблер в листинг программного модуля. Таким образом, появляется возможность писать, и отлаживать программу на языке высокого уровня, а затем переводить её на язык программирования ассемблер и окончательно оптимизировать её вручную. В листинге 24.4 приведено содержимое файла листинга, создаваемого при трансляции исходного текста программы, написанного на языке C‑51, с ассемблерным кодом.
Листинг 24.4. Содержимое файла листинга. C51 COMPILER V7.20 MAIN 08/06/2006 23:28:20 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE MAIN OBJECT MODULE PLACED IN.\obj\main.obj COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND CODE PRINT(. -\lst\main.lst) PAGEWIDTH(90) OBJECT(.\obj\main.obj)
line level source
1 /*========================= main.c =========================== 2 Программа лабораторной работы №5 4 Проект ОБУЧАЮЩИЕ ПРОГРАММЫ 5 Программист::::::::.. 6 Версия 1.00 7 Написана::::::. 9 Последнее 10 изменение::::. 11 программы 12 ============================================================*/ 14 #include "ADuC812.h" //Подключить определения всех внутренних 15 // регистров ADuC812 16 #define ParPort 0x8 //Определить константу переключения на 8 страницу памяти 18 #define SvDiod *(volatile unsigned char xdata *)7 /*Переменная косвенной 19 адресации 7 ячейки внешней памяти (светодиодов)*/ 21 main() 22 {DPP=ParPort; //Подключиться к параллельному порту 23 1 SvDiod=1; //Зажечь светодиод номер 0 24 1 25 1 while(1) //Обеспечить зацикливание микроконтроллера 26 1 { /*(чтобы не было программного сброса микросхемы */ 27 2 } /*языком программирования) */ 28 1 } C51 COMPILER V7.20 MAIN 08/06/2006 23:28:20 PAGE 2
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION main (BEGIN) ; SOURCE LINE # 21 ; SOURCE LINE # 22 0000 758408 MOV DPP,#08H ; SOURCE LINE # 23 0003 900007 MOV DPTR,#07H 0006 7401 MOV A,#01H 0008 F0 MOVX @DPTR,A 0009?C0001: ; SOURCE LINE # 25 ; SOURCE LINE # 26 ; SOURCE LINE # 27 0009 80FE SJMP?C0001 ; FUNCTION main (END)
MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 11 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = ---- ---- IDATA SIZE = ---- ---- BIT SIZE = ---- ---- END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|
||||||
Последнее изменение этой страницы: 2017-02-07; просмотров: 235; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 44.222.87.38 (0.019 с.) |