ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 ноября
416155 Топик полностью
AD (08.06.2013 18:51, просмотров: 152) ответил Adept на листинг в студию :) Вы будете отверждать, что на Си простую локальную задачу решите более эффективно?? В корне неверное утверждение, хотя бы потому, что результат работы компилятора - ассемблер (т.е. тот же машинный код)
Сколько не видел ассемблерщиков, ни один на ассемблере писать-то и не умел. 28 слов против 41, время считать лень. Можно, конечно, улучшить, я никогда не утверждал, что компилятор генерирует идеальный код. Он всего лишь делает это лучше большинства людей. Про плавающую точку вообще мимо тазика. За 15 лет ни разу не применял ее на платформах без аппаратной поддержки оной. 17 uint_fast16_t adc = ADC; \ 00000004 91000078 LDS R16, 120 \ 00000008 91100079 LDS R17, 121 18 int_fast16_t diff = adc - DESIRED_VOLTAGE; \ 0000000C 5D02 SUBI R16, 210 \ 0000000E 4014 SBCI R17, 4 19 if (diff) { \ 00000010 2F20 MOV R18, R16 \ 00000012 2B21 OR R18, R17 \ 00000014 F099 BREQ ??test_0 20 uint_fast16_t pwm = pwm_duty_cycle; \ 00000016 .... LDI R30, LOW(pwm_duty_cycle) \ 00000018 .... LDI R31, (pwm_duty_cycle) >> 8 \ 0000001A 8180 LD R24, Z \ 0000001C 8191 LDD R25, Z+1 21 if (diff < 0) { \ 0000001E 2311 TST R17 \ 00000020 F432 BRPL ??test_1 22 if (pwm < PWM_MAX) \ 00000022 358D CPI R24, 93 \ 00000024 E003 LDI R16, 3 \ 00000026 0790 CPC R25, R16 \ 00000028 F438 BRCC ??test_2 23 pwm++; \ 0000002A 9601 ADIW R25:R24, 1 \ 0000002C C005 RJMP ??test_2 24 } else { 25 if (pwm > PWM_MIN) \ ??test_1: \ 0000002E 3189 CPI R24, 25 \ 00000030 E000 LDI R16, 0 \ 00000032 0790 CPC R25, R16 \ 00000034 F008 BRCS ??test_2 26 pwm--; \ 00000036 9701 SBIW R25:R24, 1 27 } 28 pwm_duty_cycle = pwm; \ ??test_2: \ 00000038 8380 ST Z, R24 \ 0000003A 8391 STD Z+1, R25