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