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

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

Отправлено Bill 18 сентября 2003 г. 10:46
В ответ на: По поводу вчерашнего разговора про PIC и AVR. Предлагаю для сравнения функцию. Впрочем, очень интересно посмотреть на MSP и x51. отправлено Bill 18 сентября 2003 г. 08:49


1 #include
2 //
3 // ** mean - функция вычисления среднего значения некоторого набора данных
4 //

\ In segment CODE, align 2, keep-with-next
5 int mean(int *ap, unsigned count)
6 {
\ __nearfunc int mean(int *, unsigned int);
\ mean:
\ 00000000 93BA ST -Y,R27
\ 00000002 93AA ST -Y,R26
\ 00000004 01D8 MOVW R27 : R26,R17 : R16
\ 00000006 01F9 MOVW R31 : R30,R19 : R18
7 unsigned _cnt = count; // Сохранить число данных
\ 00000008 01A9 MOVW R21 : R20,R19 : R18
8 long sum = 0; // Обнулить сумму
\ 0000000A E000 LDI R16,0
\ 0000000C E010 LDI R17,0
\ 0000000E E020 LDI R18,0
\ 00000010 E030 LDI R19,0
9
10 do { // Суммирование
11 sum += *ap++; //
\ ??mean_0:
\ 00000012 900D LD R0,X+
\ 00000014 901D LD R1,X+
\ 00000016 2C21 MOV R2,R1
\ 00000018 0C22 LSL R2
\ 0000001A 0822 SBC R2,R2
\ 0000001C 0D00 ADD R16,R0
\ 0000001E 1D11 ADC R17,R1
\ 00000020 1D22 ADC R18,R2
\ 00000022 1D32 ADC R19,R2
12 } //
13 while (--count); //
\ 00000024 9731 SBIW R31 : R30,1
\ 00000026 2F6E MOV R22,R30
\ 00000028 2B6F OR R22,R31
\ 0000002A F799 BRNE ??mean_0
14 return sum / _cnt; // Вернуть среднее значение
\ 0000002C E060 LDI R22,0
\ 0000002E E070 LDI R23,0
\ 00000030 .... RCALL ?SL_DIVMOD_L03
\ 00000032 91A9 LD R26,Y+
\ 00000034 91B9 LD R27,Y+
\ 00000036 9508 RET
15 }

Maximum stack usage in bytes:

Function CSTACK RSTACK
-------- ------ ------
mean 2 2


56 bytes in segment CODE


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

Ответы



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

E-mail: info@telesys.ru