кроме тго:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено goshka 06 июля 2003 г. 20:14
В ответ на: по обработчику прерываний?? отправлено goshka 06 июля 2003 г. 15:29

Все вычисления поизводятся. В static сохраняются константные значения. Вот эта штука работает, т.е. когда я зануляю результат вычислений. (кусок обработчика irq) 

static double x;
{double t1=0.0;
double b=0.0;
double d=0.0;
double r=0.0;
rspeed[i]= tm_val[i] - inpd(addr);
t1= (double) rspeed[i];
t1/= 14318180.0;
b= 240.0 * t1 - 1/t1;
d= sqrt( pow(b,2.0) - 960.0) ;
r= (-b -d)/480.0;
r*= 14318180.0;
r+=r/10.0;
r=0.0; // если убрать эту строчку то OS падает
v=(unsigned long) r;
x=r;
}

/*=============== рез дизассемблирования ====================*/
{double t1=0.0;
008f c7 45 dc 00 00 00
00 mov dword ptr -24H[ebp],00000000H
0096 c7 45 e0 00 00 00
00 mov dword ptr -20H[ebp],00000000H

double b=0.0;
009d c7 45 d4 00 00 00
00 mov dword ptr -2cH[ebp],00000000H
00a4 c7 45 d8 00 00 00
00 mov dword ptr -28H[ebp],00000000H

double d=0.0;
00ab c7 45 cc 00 00 00
00 mov dword ptr -34H[ebp],00000000H
00b2 c7 45 d0 00 00 00
00 mov dword ptr -30H[ebp],00000000H

double r=0.0;
00b9 c7 45 c4 00 00 00
00 mov dword ptr -3cH[ebp],00000000H
00c0 c7 45 c8 00 00 00
00 mov dword ptr -38H[ebp],00000000H

rspeed[i]= tm_val[i] - inpd(addr);
00c7 8b 55 ec mov edx,-14H[ebp]
00ca c1 e2 02 shl edx,02H
00cd 8b 45 e4 mov eax,-1cH[ebp]
00d0 e8 00 00 00 00 call inpd_
00d5 8b 92 10 00 00 00 mov edx,L64[edx]
00db 29 c2 sub edx,eax
00dd 8b 45 ec mov eax,-14H[ebp]
00e0 c1 e0 02 shl eax,02H
00e3 89 90 00 00 00 00 mov _rspeed[eax],edx

t1= (double) rspeed[i];
00e9 8b 45 ec mov eax,-14H[ebp]
00ec c1 e0 02 shl eax,02H
00ef 8b 80 00 00 00 00 mov eax,_rspeed[eax]
00f5 89 45 bc mov -44H[ebp],eax
00f8 c7 45 c0 00 00 00
00 mov dword ptr -40H[ebp],00000000H
00ff df 6d bc fild qword ptr -44H[ebp]
0102 dd 5d dc fstp qword ptr -24H[ebp]

t1/= 14318180.0;
0105 dd 45 dc fld qword ptr -24H[ebp]
0108 dc 35 00 00 00 00 fdiv qword ptr L49
010e dd 5d dc fstp qword ptr -24H[ebp]

b= 240.0 * t1 - 1/t1;
0111 dd 45 dc fld qword ptr -24H[ebp]
0114 dc 0d 08 00 00 00 fmul qword ptr L50
011a d9 e8 fld1
011c dc 75 dc fdiv qword ptr -24H[ebp]
011f de e9 fsubp st(1),st
0121 dd 5d d4 fstp qword ptr -2cH[ebp]

d= sqrt( pow(b,2.0) - 960.0) ;
0124 68 00 00 00 40 push 40000000H
0129 6a 00 push 00000000H
012b dd 45 d4 fld qword ptr -2cH[ebp]
012e 83 ec 08 sub esp,00000008H
0131 dd 1c 24 fstp qword ptr [esp]
0134 e8 00 00 00 00 call pow_
0139 dc 05 10 00 00 00 fadd qword ptr L51
013f 83 ec 08 sub esp,00000008H
0142 dd 1c 24 fstp qword ptr [esp]
0145 e8 00 00 00 00 call sqrt_
014a dd 5d cc fstp qword ptr -34H[ebp]

r= (-b -d)/480.0;
014d dd 45 d4 fld qword ptr -2cH[ebp]
0150 d9 e0 fchs
0152 dc 65 cc fsub qword ptr -34H[ebp]
0155 dc 35 18 00 00 00 fdiv qword ptr L52
015b dd 5d c4 fstp qword ptr -3cH[ebp]

r*= 14318180.0;
015e dd 45 c4 fld qword ptr -3cH[ebp]
0161 dc 0d 00 00 00 00 fmul qword ptr L49
0167 dd 5d c4 fstp qword ptr -3cH[ebp]

r+=r/10.0;
016a dd 45 c4 fld qword ptr -3cH[ebp]
016d dc 35 20 00 00 00 fdiv qword ptr L53
0173 dc 45 c4 fadd qword ptr -3cH[ebp]
0176 dd 5d c4 fstp qword ptr -3cH[ebp]

r=0.0;
0179 c7 45 c4 00 00 00
00 mov dword ptr -3cH[ebp],00000000H
0180 c7 45 c8 00 00 00
00 mov dword ptr -38H[ebp],00000000H

v=(unsigned long) r;
0187 dd 45 c4 fld qword ptr -3cH[ebp]
018a e8 00 00 00 00 call __CHP
018f df 7d bc fistp qword ptr -44H[ebp]
0192 8b 45 bc mov eax,-44H[ebp]
0195 89 45 f4 mov -0cH[ebp],eax

x=r;
0198 8b 45 c4 mov eax,-3cH[ebp]
019b a3 1c 00 00 00 mov L65,eax
01a0 8b 45 c8 mov eax,-38H[ebp]
01a3 a3 20 00 00 00 mov L66,eax



ничегож особенного?? шаманство какое- то...


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru