ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 апреля
934227 Топик полностью
De_User (16.07.2019 11:33 - 11:45, просмотров: 133) ответил Ксения на Как это он может читать PINB, если операция производится с PORTB? Компилятор не способен к таким вольностям. В ассемблерный код загляните - неужели такое может быть? Можно ли этот кусок кода сюда выложить?
Спасибо! - ошибся. Читает PORTB. Но от этого не легче. Компилятор дважды использовал способ "чтение - модификация - запись" и один раз SBI.   794 if (cnt & (1 << n_line)) {SET_IN_74HC594;} 795 else {CLR_IN_74HC594;} \ ??proc_2: \ 00000016 B308 IN R16, 0x18 \ 00000018 7400 ANDI R16, 0x40 \ 0000001A BB08 OUT 0x18, R16 \ ??proc_3: \ 0000001C 0000 NOP \ 0000001E 0000 NOP \ 00000020 B308 IN R16, 0x18 \ 00000022 7002 ANDI R16, 0x02 \ 00000024 BB08 OUT 0x18, R16 \ 00000026 0000 NOP \ 00000028 0000 NOP \ 0000002A 0000 NOP \ 0000002C 9AC1 SBI 0x18, 0x01 \ 0000002E 0000 NOP #define SET_CL_74HC594 { PORTB &= (1<<PB1); } #define CLR_CL_74HC594 { PORTB |= (1<<PB1); } #define SET_DT_74HC594 { PORTB |= (1<<PB6); } #define CLR_DT_74HC594 { PORTB &= (1<<PB6); } #define CLOCK2_74HC594 { SET_CL_74HC594; __no_operation(); __no_operation(); CLR_CL_74HC594; __no_operation(); } #define SET_IN_74HC594 { SET_DT_74HC594; __no_operation(); __no_operation(); CLOCK2_74HC594;} #define CLR_IN_74HC594 { CLR_DT_74HC594; __no_operation(); __no_operation(); CLOCK2_74HC594;}
Let's come together right now !