ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 марта
853202 Топик полностью
Bill (05.07.2018 16:24, просмотров: 432) ответил sladkoejka на Ничего нового в этой статье нет. Насчет использования volatile в циклах - это очень неудачный совет. Лучше использовать какое-либо полезное действие в теле цикла (например NOP). И вот почему.
Сравнивайте  void delay(unsigned volatile long n) { while( n-- > 0 ); // __no_operation(); } 7 void delay(unsigned volatile long n) \ delay: 8 { \ 000000 REQUIRE ?V0 \ 000000 REQUIRE ?V1 \ 000000 REQUIRE ?V2 \ 000000 REQUIRE ?V3 \ 000000 REQUIRE ?V4 \ 000000 REQUIRE ?V5 \ 000000 REQUIRE ?V6 \ 000000 REQUIRE ?V7 \ 000000 7408 MOV A,#0x8 \ 000002 12.... LCALL ?FUNC_ENTER_SP \ 000005 ; Saved register size: 11 \ 000005 ; Auto size: 4 \ 000005 E581 MOV A,SP \ 000007 2404 ADD A,#0x4 \ 000009 F581 MOV SP,A \ 00000B 24FD ADD A,#-0x3 \ 00000D F8 MOV R0,A \ 00000E EA MOV A,R2 \ 00000F F6 MOV @R0,A \ 000010 08 INC R0 \ 000011 EB MOV A,R3 \ 000012 F6 MOV @R0,A \ 000013 08 INC R0 \ 000014 EC MOV A,R4 \ 000015 F6 MOV @R0,A \ 000016 08 INC R0 \ 000017 ED MOV A,R5 \ 000018 F6 MOV @R0,A 9 while( n-- > 0 ); \ ??delay_0: \ 000019 E581 MOV A,SP \ 00001B 24FD ADD A,#-0x3 \ 00001D F9 MOV R1,A \ 00001E 78.. MOV R0,#?V4 \ 000020 12.... LCALL ?L_MOV \ 000023 85.... MOV ?V0,?V4 \ 000026 85.... MOV ?V1,?V5 \ 000029 85.... MOV ?V2,?V6 \ 00002C 85.... MOV ?V3,?V7 \ 00002F 90.... MOV DPTR,#__Constant_ffffffff \ 000032 78.. MOV R0,#?V0 \ 000034 12.... LCALL ?L_ADD_C \ 000037 E581 MOV A,SP \ 000039 24FD ADD A,#-0x3 \ 00003B F8 MOV R0,A \ 00003C 74.. MOV A,#?V0 \ 00003E 12.... LCALL ?L_MOV_A \ 000041 E5.. MOV A,?V4 \ 000043 45.. ORL A,?V5 \ 000045 45.. ORL A,?V6 \ 000047 45.. ORL A,?V7 \ 000049 70CE JNZ ??delay_0 10 // __no_operation(); 11 } \ 00004B 1581 DEC SP \ 00004D 1581 DEC SP \ 00004F 1581 DEC SP \ 000051 1581 DEC SP \ 000053 7F08 MOV R7,#0x8 \ 000055 02.... LJMP ?FUNC_LEAVE_SP void delay(unsigned long n) { while( n-- > 0 ); // __no_operation(); } 7 void delay(unsigned long n) \ delay: 8 { \ 000000 REQUIRE ?V0 \ 000000 REQUIRE ?V1 \ 000000 REQUIRE ?V2 \ 000000 REQUIRE ?V3 \ 000000 ; Saved register size: 4 \ 000000 ; Auto size: 0 9 while( n-- > 0 ); 10 // __no_operation(); 11 } \ 000000 22 RET