c + asm pro 8051 nevim proc to nejde
Vláďa Anděl
vaelektronik na vaelektronik.cz
Sobota Květen 2 00:05:04 CEST 2015
No koukám že tady se Silabsama asi nikdo nedělá :-( nakonec jsem to
ovládání displeje přepsal do céčka. Je to sice proti mému přesvědčení,
dělá to pár instrukcí navíc, ale dál to už neřeším. Problém s kterým
jsem nepočítal, C8051F860 nemá u sériového kanálu režim 0. Má jen 1 a 3.
Co jsem ještě našel na stránce Silabsu:
http://community.silabs.com/t5/Simplicity-Studio-and-Software/requires-src-control-to-be-active/td-p/47583
Keil údajně dobře nezvládá in line asm, zapnout active src-control je
taky problém a když jsem to podle tohoto návodu změnil, taky to nešlo.
Propojení samostatného asm souboru s céčkem je taky asi duchařina :-(
http://www.keil.com/support/docs/1671.htm
Doporučují nejdřív vytvořit src a ten si pak přepsat něčím svým.
Vzal jsem dva hotové příklady na mixed c + asm a in-line asm a nepovedlo
se ani jedno přeložit.
http://community.silabs.com/t5/8-bit-MCU-Knowledge-Base/Mixing-C-and-Assembly-Code/ta-p/110793
Ve starém dosovském Keilu jsem běžně kombinaci c + asm používal :-(
Anděl
Dne 1.5.2015 v 17:44 Vláďa Anděl napsal(a):
> 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?
>
>
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20150502/e461e075/attachment.html>
Další informace o konferenci Hw-list