kaldachar
Guest
Mon Feb 20, 2006 5:35 pm
Witam
Mój post jest jakby kontyunuacją mojego poprzedniego postu . Problem w
tym że jeżeli w programie użyję funkcji reszta z dzielenia ( % ), lub
samego dzielenia to program się nie wykonuje . Na symulatorze
programowym wszystko jest dobrze . Czy należy dodać jakąś bibliotekę
(#include xxx ?? ) matematyczną ( liczby rozmiaru int ) , czy może
gdzieś coś ustawia w preferencji projektu ? Proszę o pomoc bo brak mi
już sił .
Z góry dziękuje
--
Pozdrawiam
kaldachar(.......)@interia.pl
BLE_Maciek
Guest
Mon Feb 20, 2006 5:40 pm
Mon, 20 Feb 2006 18:35:08 +0100 jednostka biologiczna o nazwie
kaldachar <kaldachar(kaldachar)\"@interia.pl> wyslala do portu 119
jednego z serwerow news nastepujace dane:
Quote:
(#include xxx ?? ) matematyczną ( liczby rozmiaru int ) , czy może
gdzieś coś ustawia w preferencji projektu ? Proszę o pomoc bo brak mi
już sił .
Nie używam RIDE51, ale gdyby brakowało #include <xxxx> to program by
się nie skompilował.
kaldachar
Guest
Mon Feb 20, 2006 5:46 pm
Tak też przypuszczam , ale może ktoś używa i wie w czym problem . Mnie
już ręce opadają ( i nie tylko

).
--
Pozdrawiam
kaldachar(.......)@interia.pl
Zbych
Guest
Mon Feb 20, 2006 6:12 pm
kaldachar przemówił ludzkim głosem:
Quote:
Problem w
tym że jeżeli w programie użyję funkcji reszta z dzielenia ( % ), lub
samego dzielenia to program się nie wykonuje . Na symulatorze
programowym wszystko jest dobrze .
Szkoda, że nie podałeś na jakich liczbach próbujesz to dzielenie modulo
wykonać (8, 16, 32-bitowe; ze znakiem, czy bez) - wtedy by było wiadomo,
czy program odwołuje się do biblioteki, czy wykorzystuje tylko sprzętowy
rozkaz dzielenia. Najlepiej by było gdybyś poszukał w asemblerowych
listingach miejsca, w którym znajduje się twoje dzielenie i wkleił
fragment na grupę. Sprawdź też, czy nie próbujesz załadować programu
większego niż pamięć w procesorze.
kaldachar
Guest
Mon Feb 20, 2006 6:27 pm
Proszę oto ten słynny listing :-)
; SOURCE LINE # 114
0002 75F00A MOV B,#00AH
0005 EF MOV A,R7
0006 84 DIV AB
0007 EE MOV A,R6
0008 2400 R ADD A,#hex_bcd
000A F8 MOV R0,A
000B A6F0 MOV @R0,B
; SOURCE LINE # 115
000D 75F00A MOV B,#00AH
0010 EF MOV A,R7
0011 84 DIV AB
0012 FF MOV R7,A
void Hex_bcd_16(unsigned int liczba)
{
char i ;
for(i=0;i<=2;i++)
{
hex_bcd[i]=liczba%10 ; // linia 114
liczba=liczba/10 ; // linia 115
}
}
-----------------------------------------------------------------------
; SOURCE LINE # 114
0006 AE00 R MOV R6,liczba
0008 AF00 R MOV R7,liczba+01H
000A E4 CLR A
000B FC MOV R4,A
000C 7D0A MOV R5,#00AH
000E 120000 R LCALL ?C_UIDIV
0011 EA MOV A,R2
0012 2400 R ADD A,#hex_bcd
0014 F8 MOV R0,A
0015 A605 MOV @R0,AR5
; SOURCE LINE # 115
0017 AE00 R MOV R6,liczba
0019 AF00 R MOV R7,liczba+01H
001B E4 CLR A
001C FC MOV R4,A
001D 7D0A MOV R5,#00AH
001F 120000 R LCALL ?C_UIDIV
0022 8E00 R MOV liczba,R6
void Hex_bcd_16(unsigned int liczba)
{
char i ;
for(i=0;i<=2;i++)
{
hex_bcd[i]=liczba%10 ; //linia 114
liczba=liczba/10 ; //linia 115
}
}
--------------------------------------------------------------------
--
Pozdrawiam
kaldachar(.......)@interia.pl
GG 3238373
kaldachar
Guest
Mon Feb 20, 2006 6:29 pm
kaldachar napisał(a):
Quote:
Proszę oto ten słynny listing :-)
; SOURCE LINE # 114
0002 75F00A MOV B,#00AH
0005 EF MOV A,R7
0006 84 DIV AB
0007 EE MOV A,R6
0008 2400 R ADD A,#hex_bcd
000A F8 MOV R0,A
000B A6F0 MOV @R0,B
; SOURCE LINE # 115
000D 75F00A MOV B,#00AH
0010 EF MOV A,R7
0011 84 DIV AB
0012 FF MOV R7,A
void Hex_bcd_16(unsigned char liczba)
{
char i ;
for(i=0;i<=2;i++)
{
hex_bcd[i]=liczba%10 ; // linia 114
liczba=liczba/10 ; // linia 115
}
}
-----------------------------------------------------------------------
; SOURCE LINE # 114
0006 AE00 R MOV R6,liczba
0008 AF00 R MOV R7,liczba+01H
000A E4 CLR A
000B FC MOV R4,A
000C 7D0A MOV R5,#00AH
000E 120000 R LCALL ?C_UIDIV
0011 EA MOV A,R2
0012 2400 R ADD A,#hex_bcd
0014 F8 MOV R0,A
0015 A605 MOV @R0,AR5
; SOURCE LINE # 115
0017 AE00 R MOV R6,liczba
0019 AF00 R MOV R7,liczba+01H
001B E4 CLR A
001C FC MOV R4,A
001D 7D0A MOV R5,#00AH
001F 120000 R LCALL ?C_UIDIV
0022 8E00 R MOV liczba,R6
void Hex_bcd_16(unsigned int liczba)
{
char i ;
for(i=0;i<=2;i++)
{
hex_bcd[i]=liczba%10 ; //linia 114
liczba=liczba/10 ; //linia 115
}
}
--------------------------------------------------------------------
To jest poprawny zapis . Przepraszam
--
Pozdrawiam
kaldachar(.......)@interia.pl
GG 3238373
Zbych
Guest
Mon Feb 20, 2006 7:30 pm
kaldachar przemówił ludzkim głosem:
Quote:
; SOURCE LINE # 114
0006 AE00 R MOV R6,liczba
0008 AF00 R MOV R7,liczba+01H
000A E4 CLR A
000B FC MOV R4,A
000C 7D0A MOV R5,#00AH
000E 120000 R LCALL ?C_UIDIV
Jak byś jeszcze odnalazł fizyczny adres procedury C_UIDIV i podał
procesor, do którego to potem ładujesz, to można by jakieś wnioski
wyciągnąć.
kaldachar
Guest
Mon Feb 20, 2006 8:25 pm
Zbych napisał(a):
Quote:
kaldachar przemówił ludzkim głosem:
; SOURCE LINE # 114
0006 AE00 R MOV R6,liczba
0008 AF00 R MOV R7,liczba+01H
000A E4 CLR A
000B FC MOV R4,A
000C 7D0A MOV R5,#00AH
000E 120000 R LCALL ?C_UIDIV
Jak byś jeszcze odnalazł fizyczny adres procedury C_UIDIV i podał
procesor, do którego to potem ładujesz, to można by jakieś wnioski
wyciągnąć.
Adres fizyczny to 00x2B a procesor to AT89c51
--
Pozdrawiam
kaldachar(.......)@interia.pl
GG 3238373
Zbych
Guest
Mon Feb 20, 2006 8:37 pm
kaldachar przemówił ludzkim głosem:
Quote:
Adres fizyczny to 00x2B a procesor to AT89c51
Powiem szczerze, że wszystko wygląda ok. Jedyne co mi jeszcze przychodzi
do głowy co mogłoby rozłożyć program, to próba wywoływanie tych funkcji
z obsługi przerwania (może funkcje biblioteczne nie są reentrant?), albo
zbyt mało miejsca na stos.
kaldachar
Guest
Mon Feb 20, 2006 8:57 pm
Nie jestem zbyt biegły w środowisku RIDE-51 . W jaki sposób można
zwiększyć rozmiar stosu ?
--
Pozdrawiam
kaldachar(.......)@interia.pl
GG 3238373
Zbych
Guest
Tue Feb 21, 2006 10:20 pm
Witam
Quote:
Nie jestem zbyt biegły w środowisku RIDE-51 . W jaki sposób można
zwiększyć rozmiar stosu ?
Stos ma wymiar od najwyższego używanego adresu komórki pamięci RAM do końca
tej pamięci. Przeanalizuj sobie początek programu *.HEX. Znajdziesz prawie
na początku instrukcję MOV SP,#xx. Jest to początek stosu generowany przez
kompilator, a wszystko to zawarte jest w startup.a51. Poczytaj Helpa.
--
Pozdrowienia Zbych
kaldachar
Guest
Tue Feb 21, 2006 10:43 pm
Dziękuje poszukam :-)
--
Pozdrawiam
kaldachar(.......)@interia.pl
GG 3238373