Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Ответ: (+)

Отправлено F8 20 декабря 2006 г. 20:30
В ответ на: ну а листинг где? отправлено Elektronik 20 декабря 2006 г. 20:19


1 Полная оптимизация работа через указатель
// 357 __ramfunc __arm S32 TDTMFDecoder::CalcFilter(S32 a1)
// 358 {
??CalcFilter:
STR R4,[SP, #-4]! ;; Push
CFI R4 Frame(CFA, -4)
CFI CFA R13+4
// 359
// 360 S32 D0 = 0;
// 361 S32 D1 = 0;
MOV R2,#+0
// 362 S32 D2 = 0;
MOV R1,#+0
// 363
// 364 S16 *pData = &pDataBuffer[DataBufferIndex & 0xFF];
LDR R3,??CalcFilter_1 ;; ??DetTimeout
LDR R4,[R3, #+0x6C]
AND R4,R4,#+0xFF
LDR R3,[R3, #+0x34]
ADD R3,R3,R4, LSL #+0x1
// 365
// 366 for(U32 i = 0; i < GOERTZEL_POINT; i++)
MOV R12,#+0x80
// 367 {
// 368 //S32 data = pData[i];
// 369 S32 data = *pData++;
??CalcFilter_2:
LDRSH R4,[R3], #+0x2
// 370
// 371 D0 = (a1 * D1)>>M;
// 372 D0 +=data;
// 373 D0 -= D2;
MLA R4,R2,R0,R4
SUB R4,R4,R1
// 374
// 375 D2 = D1;
MOV R1,R2
// 376 D1 = D0;
MOV R2,R4
// 377 }
SUBS R12,R12,#+0x1
BNE ??CalcFilter_2
// 378
// 379 return(D1 * D1 + D2 * D2 - (((D2 * D1>>8) * a1)>>(M-8)));
MUL R3,R1,R1
MLA R3,R2,R2,R3
MUL R1,R2,R1
MOV R1,R1, ASR #+0x8
MUL R1,R0,R1
SUB R0,R3,R1, ASR #+0x2
LDR R4,[SP], #+0x4 ;; pop

2. Оптимизация = 6, тоже через указатель
// 357 __ramfunc __arm S32 TDTMFDecoder::CalcFilter(S32 a1)
// 358 {
??CalcFilter:
STMDB SP!,{R4,R5} ;; Push
CFI R5 Frame(CFA, -4)
CFI R4 Frame(CFA, -8)
CFI CFA R13+8
// 359
// 360 S32 D0 = 0;
// 361 S32 D1 = 0;
MOV R2,#+0
// 362 S32 D2 = 0;
MOV R1,R2
// 363
// 364 S16 *pData = &pDataBuffer[DataBufferIndex & 0xFF];
LDR R3,??CalcFilter_1 ;; ??DetTimeout
LDR R4,[R3, #+0x6C]
AND R4,R4,#+0xFF
LDR R3,[R3, #+0x34]
ADD R3,R3,R4, LSL #+0x1
// 365
// 366 for(U32 i = 0; i < GOERTZEL_POINT; i++)
MOV R12,R1
B ??CalcFilter_2
// 367 {
// 368 //S32 data = pData[i];
// 369 S32 data = *pData++;
??CalcFilter_3:
LDRSH R4,[R3], #+0x2
// 370
// 371 D0 = (a1 * D1)>>M;
// 372 D0 +=data;
// 373 D0 -= D2;
MUL R5,R2,R0
ADD R4,R4,R5, ASR #+0xA
SUB R4,R4,R1
// 374
// 375 D2 = D1;
MOV R1,R2
// 376 D1 = D0;
MOV R2,R4
// 377 }
ADD R12,R12,#+0x1
??CalcFilter_2:
CMP R12,#+0x80
BCC ??CalcFilter_3
// 378
// 379 return(D1 * D1 + D2 * D2 - (((D2 * D1>>8) * a1)>>(M-8)));
MUL R3,R1,R1
MLA R3,R2,R2,R3
MUL R1,R2,R1
MOV R1,R1, ASR #+0x8
MUL R1,R0,R1
SUB R0,R3,R1, ASR #+0x2
LDMIA SP!,{R4,R5} ;; Pop

3. Полная оптимизация. Через индекс.

// 357 __ramfunc __arm S32 TDTMFDecoder::CalcFilter(S32 a1)
// 358 {
??CalcFilter:
STMDB SP!,{R4,R5} ;; Push
CFI R5 Frame(CFA, -4)
CFI R4 Frame(CFA, -8)
CFI CFA R13+8
// 359
// 360 S32 D0 = 0;
// 361 S32 D1 = 0;
MOV R2,#+0
// 362 S32 D2 = 0;
MOV R1,#+0
// 363
// 364 S16 *pData = &pDataBuffer[DataBufferIndex & 0xFF];
LDR R3,??CalcFilter_1 ;; ??DetTimeout
LDR R4,[R3, #+0x6C]
AND R4,R4,#+0xFF
LDR R3,[R3, #+0x34]
ADD R3,R3,R4, LSL #+0x1
// 365
// 366 for(U32 i = 0; i < GOERTZEL_POINT; i++)
MOV R12,R2
// 367 {
// 368 S32 data = pData[i];
// 369 //S32 data = *pData++;
// 370
// 371 D0 = (a1 * D1)>>M;
// 372 D0 +=data;
// 373 D0 -= D2;
??CalcFilter_2:
MUL R4,R2,R0
ADD R5,R3,R12, LSL #+0x1
LDRSH R5,[R5, #+0]
ADD R4,R5,R4, ASR #+0xA
SUB R4,R4,R1
// 374
// 375 D2 = D1;
MOV R1,R2
// 376 D1 = D0;
MOV R2,R4
// 377 }
ADD R12,R12,#+0x1
CMP R12,#+0x80
BCC ??CalcFilter_2
// 378
// 379 return(D1 * D1 + D2 * D2 - (((D2 * D1>>8) * a1)>>(M-8)));
MUL R3,R1,R1
MLA R3,R2,R2,R3
MUL R1,R2,R1
MOV R1,R1, ASR #+0x8
MUL R1,R0,R1
SUB R0,R3,R1, ASR #+0x2
LDMIA SP!,{R4,R5} ;; Pop



Составить ответ | Вернуться на конференцию

Ответы



Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru