Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по ASM на Keil
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
JustIce
Возник такой вопрос:
При разделении асемблерного кода на несколько файлов (выделение каждой функции своего файла) компилятор почему то лепит кажый файл начиная с нулевого адреса.
Кто знает как сделать так чтобы компилятор последовательно соединил всё?

;-----------------------------
prog_01.asm

EXTRN CODE(quart_read)
;-----------------------------
quart_read.asm

PUBLIC quart_read
;-----------------------------

INPUT MODULES INCLUDED:
quart_read.obj (QUART_READ)
prog_01.obj (PROG_01)


LINK MAP OF MODULE: scnd (QUART_READ)


TYPE BASE LENGTH RELOCATION SEGMENT NAME
-----------------------------------------------------

* * * * * * * D A T A M E M O R Y * * * * * * *
REG 0000H 0008H ABSOLUTE "REG BANK 0"

* * * * * * * C O D E M E M O R Y * * * * * * *
CODE 0000H 0053H ABSOLUTE
* OVERLAP * CODE 0000H A0EBH ABSOLUTE
Палыч
Цитата(JustIce @ Jan 18 2009, 11:21) *
При разделении асемблерного кода на несколько файлов (выделение каждой функции своего файла) компилятор почему то лепит кажый файл начиная с нулевого адреса.
По всей видимости в исходном файле был определен сегмент кода, размещаемый с нулевого адреса. При разделении файла, Вы в каждом файле определили такие сегменты. Посмотрите ассемблерную инструкцию SEGMENT в документе a51.chm в каталоге HLP Keil'a
Omen_13
Необходимо импользовать RSEG для того чтобы сегменты кода были перемещаемые

Код
TimerModul    SEGMENT CODE;определяем сегмент в ПЗУ
    RSEG TimerModul;ссылаемся на него

PUBLIC proc1
serenya
Цитата(JustIce @ Jan 18 2009, 11:21) *
При разделении асемблерного кода на несколько файлов (выделение каждой функции своего файла)...

Подскажите пожалуйста как разделить один файл asm на несколько и потом все файлы включить в проект, у меня ссылки на переменные и подпрограммы не видит компилятор. В Silabs IDE в начале файла я добавлял $include (LCD.asm) а как правильно это сделать в KEIL?
-JonnS-
В "асм" секции надо обявить:
Код
PUBLIC Tmp;
.....
ASM_data SEGMENT DATA           ; segment for DATA RAM.
         RSEG    ASM_data       ; switch to this data segment
Tmp:     DS     1
EXTRN     DATA     (Count,Count1)
....
PUBLIC     LCD_Init,.....
...
LCD_Init:  
......
mov a,Count
.....

В "С" секции:
Код
extern char Tmp;
char Count,Count1;
.....
extern void LCD_Init(void);
....
serenya
Цитата(-JonnS- @ Nov 25 2009, 22:16) *
В "асм" секции надо обявить:
Код
PUBLIC Tmp;
.....
ASM_data SEGMENT DATA          ; segment for DATA RAM.
         RSEG    ASM_data      ; switch to this data segment
Tmp:     DS     1
EXTRN     DATA     (Count,Count1)
....
PUBLIC     LCD_Init,.....
...
LCD_Init:  
......
mov a,Count
.....

В "С" секции:
Код
extern char Tmp;
char Count,Count1;
.....
extern void LCD_Init(void);
....

Спасибо, начало получаться.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.