Problem z Keilem
Masz problem? Zapytaj na forum elektroda.pl
From: "megaraptor" <megaraptor_at_nospam_gazeta.pl>
Subject: Problem z Keilem
Date: Sun, 5 Oct 2003 14:12:11 +0200
Napisalem w Keilu C51 taką oto funkcję:
// deklaracja rejestru DPTR jako sfr16
sfr16 PM = 0x82;
void write_row(void) small
{
char cntr;
DPL = wr_page_index;
cntr = 8;
do
{
DPH = visual_page;
ACC = *(char xdata*)PM;
ACC = ~ACC;
DPH = 0x80;
*(char xdata*)PM = ACC;
DPL++;
DPH = visual_page;
ACC = *(char xdata*)PM;
ACC = ~ACC;
DPH = 0x80;
*(char xdata*)PM = ACC;
DPL++;
}while(--cntr);
wr_page_index = DPL;
}
wszystko jest niby ok ale kod wynikowy w asm wygląda następująco:
; FUNCTION write_row (BEGIN)
; SOURCE LINE # 200
; SOURCE LINE # 208
0000 850082 E MOV DPL,wr_page_index
; SOURCE LINE # 209
;---- Variable 'cntr' assigned to Register 'R7' ----
0003 7F08 MOV R7,#08H
0005 ?C0007:
; SOURCE LINE # 212
; SOURCE LINE # 219
0005 850083 E MOV DPH,visual_page
; SOURCE LINE # 220
0008 AD82 MOV R5,DPL
000A AC83 MOV R4,DPH
000C E0 MOVX A,_at_nospam_DPTR
; SOURCE LINE # 221
000D F4 CPL A
; SOURCE LINE # 222
000E 758380 MOV DPH,#080H
C51 COMPILER V7.00 TMR
10/05/2003 13:57:44 PAGE 11
; SOURCE LINE # 223
0011 F0 MOVX _at_nospam_DPTR,A
; SOURCE LINE # 224
0012 0582 INC DPL
; SOURCE LINE # 232
0014 850083 E MOV DPH,visual_page
; SOURCE LINE # 233
0017 AD82 MOV R5,DPL
0019 E0 MOVX A,_at_nospam_DPTR
; SOURCE LINE # 234
001A F4 CPL A
; SOURCE LINE # 235
001B 758380 MOV DPH,#080H
; SOURCE LINE # 236
001E F0 MOVX _at_nospam_DPTR,A
; SOURCE LINE # 237
001F 0582 INC DPL
; SOURCE LINE # 240
0021 DFE2 DJNZ R7,?C0007
; SOURCE LINE # 248
0023 858200 E MOV wr_page_index,DPL
; SOURCE LINE # 249
0026 22 RET
; FUNCTION write_row (END)
w kodzie tym widać, że wszystko jest jak należy ale kompilator nie wiadomo
po co dokłada instrukcje
0008 AD82 MOV R5,DPL
000A AC83 MOV R4,DPH
może ktoś sie spotkał z czymś takim i znalazł rozwiazanie ?
Pzdr
megaraptor
========
Path: news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!news.man.poznan.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Marek" <neticus_at_nospam_wp.pl>
Subject: Re: Problem z Keilem
Date: Tue, 7 Oct 2003 03:37:31 +0200
Użytkownik "megaraptor" <megaraptor_at_nospam_gazeta.pl> napisał w wiadomości
news:blp1rc$rbv$1_at_nospam_inews.gazeta.pl...
Napisalem w Keilu C51 taką oto funkcję:
powiedzmy szczerze ... napisałem w assemblerze
używając Keila ... ;-)
Napisałem to samo w moim Keilu 5.5 i nie ma tego
efektu ani bezsensownej linii:
; SOURCE LINE # 233
0017 AD82 MOV R5,DPL
<zbędna linia>
0019 E0 MOVX A,_at_nospam_DPTR
Tak po prostu się zdarza ... kompilatory działają
podług pewnego wzorca i dla typowych konwersji, działań
na pointerach itp mają typowe szkielety funkcji, podstawień.
Są to efekty uboczne najczęściej nieszkodliwe i nie należy
się tym za bardzo przejmować, chyba że te R4/R5 do czegoś
używasz i Ci to przeszkadza. Wtedy widzę dwa wyjścia:
- napisać funkcję w assemblerze (to już prawie zrobiłeś :-) )
- użyć jakiejś opcji kompilatora 'optimize size' ? Nie wiem
dokładnie jak to w Twoim Keilu 7 wygląda, bo mam starego
wypróbowanego Keila 5.5, ale spróbuj podziałać w tym kierunku
może ?
Pzdr,
Marek
========
Path: news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai