ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
3 июля
91677 Топик полностью
ReAl (14.06.2007 17:14, просмотров: 1) ответил ReAl на Или так, как С++ посоветовал. На avr-gcc это выглядело бы как-то так:
Вот такое оно накомпилячило <asm> ../../exe/foo.elf: file format elf32-avr Disassembly of section .text: 00000000 <__vectors>: 0: 0e c0 rjmp .+28 ; 0x1e <__ctors_end> 2: 40 c0 rjmp .+128 ; 0x84 <__vector_1> 4: 28 c0 rjmp .+80 ; 0x56 <__bad_interrupt> 6: 27 c0 rjmp .+78 ; 0x56 <__bad_interrupt> 8: 26 c0 rjmp .+76 ; 0x56 <__bad_interrupt> a: 25 c0 rjmp .+74 ; 0x56 <__bad_interrupt> c: 24 c0 rjmp .+72 ; 0x56 <__bad_interrupt> e: 23 c0 rjmp .+70 ; 0x56 <__bad_interrupt> 10: 22 c0 rjmp .+68 ; 0x56 <__bad_interrupt> 12: 21 c0 rjmp .+66 ; 0x56 <__bad_interrupt> 14: 20 c0 rjmp .+64 ; 0x56 <__bad_interrupt> 16: 1f c0 rjmp .+62 ; 0x56 <__bad_interrupt> 18: 1e c0 rjmp .+60 ; 0x56 <__bad_interrupt> 1a: 1d c0 rjmp .+58 ; 0x56 <__bad_interrupt> 1c: 1c c0 rjmp .+56 ; 0x56 <__bad_interrupt> 0000001e <__ctors_end>: 1e: 11 24 eor r1, r1 20: 1f be out 0x3f, r1 ; 63 22: cf e5 ldi r28, 0x5F ; 95 24: d1 e0 ldi r29, 0x01 ; 1 26: de bf out 0x3e, r29 ; 62 28: cd bf out 0x3d, r28 ; 61 0000002a <__do_copy_data>: 2a: 10 e0 ldi r17, 0x00 ; 0 2c: a0 e6 ldi r26, 0x60 ; 96 2e: b0 e0 ldi r27, 0x00 ; 0 30: e8 e9 ldi r30, 0x98 ; 152 32: f0 e0 ldi r31, 0x00 ; 0 34: 03 c0 rjmp .+6 ; 0x3c <.do_copy_data_start> 00000036 <.do_copy_data_loop>: 36: c8 95 lpm 38: 31 96 adiw r30, 0x01 ; 1 3a: 0d 92 st X+, r0 0000003c <.do_copy_data_start>: 3c: a0 36 cpi r26, 0x60 ; 96 3e: b1 07 cpc r27, r17 40: d1 f7 brne .-12 ; 0x36 <.do_copy_data_loop> 00000042 <__do_clear_bss>: 42: 10 e0 ldi r17, 0x00 ; 0 44: a0 e6 ldi r26, 0x60 ; 96 46: b0 e0 ldi r27, 0x00 ; 0 48: 01 c0 rjmp .+2 ; 0x4c <.do_clear_bss_start> 0000004a <.do_clear_bss_loop>: 4a: 1d 92 st X+, r1 0000004c <.do_clear_bss_start>: 4c: a1 36 cpi r26, 0x61 ; 97 4e: b1 07 cpc r27, r17 50: e1 f7 brne .-8 ; 0x4a <.do_clear_bss_loop> 52: 20 d0 rcall .+64 ; 0x94 <main> 54: 20 c0 rjmp .+64 ; 0x96 <_exit> 00000056 <__bad_interrupt>: 56: d4 cf rjmp .-88 ; 0x0 <__vectors> 00000058 <INT0_vect_body>: uint8_t val; void INT0_vect_body(void) __attribute__((signal)); void INT0_vect_body(void) { 58: 1f 92 push r1 5a: 0f 92 push r0 5c: 0f b6 in r0, 0x3f ; 63 5e: 0f 92 push r0 60: 11 24 eor r1, r1 62: 8f 93 push r24 if( --val == 0 ) { 64: 80 91 60 00 lds r24, 0x0060 68: 81 50 subi r24, 0x01 ; 1 6a: 80 93 60 00 sts 0x0060, r24 6e: 88 23 and r24, r24 70: 19 f4 brne .+6 ; 0x78 <INT0_vect_body+0x20> val = 100; 72: 84 e6 ldi r24, 0x64 ; 100 74: 80 93 60 00 sts 0x0060, r24 78: 8f 91 pop r24 7a: 0f 90 pop r0 7c: 0f be out 0x3f, r0 ; 63 7e: 0f 90 pop r0 80: 1f 90 pop r1 82: 18 95 reti 00000084 <__vector_1>: } } void INT0_vect(void) __attribute__((naked)); void INT0_vect(void) { 84: 0f 92 push r0 86: 00 90 60 00 lds r0, 0x0060 8a: 08 ba out 0x18, r0 ; 24 __asm__ volatile ( "push __tmp_reg__ \n\t" "lds __tmp_reg__, val \n\t" "out %0, __tmp_reg__ \n\t" : : "I" (_SFR_IO_ADDR(PORTB)) ); sei(); 8c: 78 94 sei INT0_vect_body(); 8e: e4 df rcall .-56 ; 0x58 <INT0_vect_body> __asm__ volatile ( 90: 0f 90 pop r0 92: 18 95 reti 00000094 <main>: "pop __tmp_reg__ \n\t" "reti" : : ); } void main(void) { 94: ff cf rjmp .-2 ; 0x94 <main> 00000096 <_exit>: 96: ff cf rjmp .-2 ; 0x96 <_exit> </asm>