[an error occurred while processing this directive] [an error occurred while processing this directive]
ОбъявИте все метки кода глобальными, ссылки на них внешними и генерите оба файла отдельно
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Black Eagle 19 января 2002 г. 00:30
В ответ на: Помогите идеей, спецы в ассемблере 51 отправлено ROMSERVICE 18 января 2002 г. 18:43

Например, таким макаром:


;------------------------------- codefile.a51 -------------------------------

.chip 8052
.global init,code1,code2

ref: .section
.org 0

init:
mov sp,#60h
code1:
mov dpl,#0
mov dph,#0
code2:
setb p2.0
.ends
;----------------------------------------------------------------------------

;------------------------------- datafile.a51 -------------------------------
.chip 8052
.extern init,code1,code2

.org 0

data1:
.db 1,2,3,4
data2:
.dw init
.dw code1
.dw code2
.dw data2
.end
;----------------------------------------------------------------------------

------------------------------- Log file -------------------------------
1. xasm51 codefile.a51 -dx

2500 A.D. 8051 Macro Assembler - Version 4.01d
------------------------------------------------

Input Filename : codefile.a51
Output Filename : codefile.obj

Lines Assembled : 15 Assembly Errors : 0
-------------------------------------------------------------------------

2. xasm51 datafile.a51 -dx

2500 A.D. 8051 Macro Assembler - Version 4.01d
------------------------------------------------

Input Filename : datafile.a51
Output Filename : datafile.obj

Lines Assembled : 13 Assembly Errors : 0
-------------------------------------------------------------------------

3. link51

2500 A.D. Linker Copyright (C) 1985 - Version 4.01e

Input Filename :
Enter Offset For 'ref': <->

Input Filename :
Enter Offset For 'CODE': <0>

Input Filename :

Output Filename :
Library Filename :

Options (D, S, A, M, Z, X, H, E, T, 1, 2, 3, = Default) : dh

******************************************************************************
* L O A D M A P *
******************************************************************************
* Section Name Starting Address Ending Address Size *
******************************************************************************
* codefile.obj *
* -ref 0000 000A 000B *
* datafile.obj *
* CODE 0000 000B 000C *
******************************************************************************

Link Errors : 0 Output Format : Intel Hex
-------------------------------------------------------------------------

------------------------------- outfile.hex -----------------------------
:0C000000010203040000000300090004DA
:00000001FF
-------------------------------------------------------------------------

Должно получиться, если я Вас верно понял. Синтаксис Raisonance я не учитывал, главное - идея, с линкером AD2500 все получается. Линкер должен взять все внешние ссылки из подсунутого ему объектника codefile.obj, при этом, правда, приходится сгенерить секцию (в моем примере - ref), чтобы в объектнике она не появилась под именем code, иначе линкер принудительно включит в datafile.hex не только вычисленные по codefile ссылки (на запрос Enter offset for ref: отвечено "-", т.е. взять только ссылки), но и сам ее код.

Удачи!

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

Ответы



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

E-mail: info@telesys.ru