c + asm pro 8051 nevim proc to nejde
Vláďa Anděl
vaelektronik na vaelektronik.cz
Pátek Květen 1 17:44:19 CEST 2015
Dobrý den,
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:
..............................................................................
začátek C
#pragma DB OE
#pragma code
#pragma print
#include <reg51.h>
extern void ZOBR(void);
...............................................................................
začátek asm
NAME ROT
PUBLIC ZOBR
USING 0
DISPLEJ SEGMENT CODE
RSEG DISPLEJ
EXTRN DATA (Bufdisp)
clk7s EQU P3.3 ; displej 7 segm
datad EQU P3.1 ; data
ZOBR: MOV R6, #6 ;pocet pozic displeje
MOV R0, #Bufdisp ;pocatecni adresa dat
ZOB1: MOV R7, #8 ;pocet bitu v bajtu
MOV A, @R0 ;zobrazena data
...............................................................................................
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
WARNING L1 UNRESOLVED EXTERNAL SYMBOL
SYMBOL: ZOBR
MODULE: C:\ ...... regdrn.obj
WARNING L2 REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: ZOBR
ADRESS: 04A7H
Něco jsem o tom našel tady
http://www.keil.com/support/docs/1671.htm
a do hlavičky asm jsem doplnil
EXTRN CODE (Dispint)
což je název funkce, odkud se ZOBR volá z céčka. Dělá to stále to samé.
Není mi jasné, jak v tom příkladu mají název funkce
?PR?a_func?A_FUNC
jestli jim to jen takhle vygeneroval překladač, nebo je potřeba dodržet
nějakou konstrukci názvu?
Také jsem jsem našel, že lze použít i inline asm. Vložil jsem tedy asm
takhle
//ZOBR(); // puvodni zobrazeni buferu na displej
#pragma asm
MOV R6, #6 ;pocet pozic displeje
MOV R0, #Bufdisp ;pocatecni adresa dat
ZOB1: MOV R7, #8 ;pocet bitu v bajtu
MOV A, @R0 ;zobrazena data
INC R0 ;dalsi pozice
ZOB2: RRC A
MOV datad,C ;CARRY DO DATA
CLR clkd ;UKONCENI CLK
SETB clkd ;ZACATEK CLK IMPULZU
DJNZ R7, ZOB2
DJNZ R6, ZOB1
#pragma endasm
}
Tam mi to zase píše
ERROR C272 IN LINE 371 OF regdrn2.c 'asm/endasm requires src-control
to be active
ERROR C272 IN LINE 388 OF regdrn2.c 'asm/endasm requires src-control
to be active
a marně hledám, kde src-control zapnout.
Dokáže mi někdo poradit co s tím?
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20150501/366e22d8/attachment.html>
Další informace o konferenci Hw-list