<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<font face="Times New Roman">Dobrý den,<br>
půl dne vymýšlím co s tím, aby mi fungovalo propojení c a asm v
IDE od Silabsu. Nevím, co dělám špatně. V dobách kdy jsem používal
starý dosovský Keil, kombinoval jsem c + asm takhle:<br>
..............................................................................<br>
začátek C<br>
<br>
#pragma DB OE<br>
#pragma code<br>
#pragma print<br>
<br>
#include <reg51.h> <br>
extern void ZOBR(void);<br>
...............................................................................<br>
začátek asm<br>
<br>
NAME ROT<br>
PUBLIC ZOBR<br>
USING 0<br>
<br>
DISPLEJ SEGMENT CODE<br>
RSEG DISPLEJ<br>
EXTRN DATA (Bufdisp)<br>
<br>
clk7s EQU P3.3 ; displej 7 segm<br>
datad EQU P3.1 ; data<br>
<br>
ZOBR: MOV R6, #6 ;pocet pozic displeje<br>
MOV R0, #Bufdisp ;pocatecni adresa dat<br>
ZOB1: MOV R7, #8 ;pocet bitu v bajtu<br>
MOV A, @R0 ;zobrazena data<br>
...............................................................................................<br>
</font><font face="Times New Roman">Jenže v IDE od Silabsu (v tom
jejich starším 4.90.00) to nefunguje. Samotný c a asm se přeloží
správně, ale když spustím build all, napíše to<br>
WARNING L1 UNRESOLVED EXTERNAL SYMBOL<br>
SYMBOL: ZOBR<br>
MODULE: C:\ ...... regdrn.obj<br>
<br>
</font><font face="Times New Roman"><font face="Times New Roman">WARNING
L2 REFERENCE MADE TO UNRESOLVED EXTERNAL</font><br>
</font><font face="Times New Roman"><font face="Times New Roman">SYMBOL:
ZOBR<br>
ADRESS: 04A7H<br>
</font><br>
Něco jsem o tom našel tady<br>
<a class="moz-txt-link-freetext" href="http://www.keil.com/support/docs/1671.htm">http://www.keil.com/support/docs/1671.htm</a><br>
<br>
a do hlavičky asm jsem doplnil<br>
EXTRN CODE (Dispint) <br>
což je název funkce, odkud se ZOBR volá z céčka. Dělá to stále to
samé.<br>
Není mi jasné, jak v tom příkladu mají název funkce <br>
?PR?a_func?A_FUNC<br>
jestli jim to jen takhle vygeneroval překladač, nebo je potřeba
dodržet nějakou konstrukci názvu?<br>
<br>
Také jsem jsem našel, že lze použít i inline asm. Vložil jsem tedy
asm takhle<br>
<br>
//ZOBR(); // puvodni zobrazeni buferu na displej<br>
#pragma asm<br>
MOV R6, #6 ;pocet pozic displeje<br>
MOV R0, #Bufdisp ;pocatecni adresa dat<br>
<br>
ZOB1: MOV R7, #8 ;pocet bitu v bajtu<br>
MOV A, @R0 ;zobrazena data<br>
INC R0 ;dalsi pozice<br>
ZOB2: RRC A <br>
MOV datad,C ;CARRY DO DATA <br>
CLR clkd ;UKONCENI CLK <br>
SETB clkd ;ZACATEK CLK IMPULZU <br>
DJNZ R7, ZOB2 <br>
DJNZ R6, ZOB1 <br>
#pragma endasm<br>
}<br>
<br>
Tam mi to zase píše<br>
ERROR C272 IN LINE 371 OF regdrn2.c 'asm/endasm requires
src-control to be active<br>
</font><font face="Times New Roman"><font face="Times New Roman">ERROR
C272 IN LINE 388 OF regdrn2.c 'asm/endasm requires src-control
to be active<br>
<br>
a marně hledám, kde src-control zapnout. <br>
<br>
Dokáže mi někdo poradit co s tím?<br>
</font><br>
<br>
</font>
</body>
</html>