ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
18 апреля
743429
misyachniy (20.03.2017 16:01 - 16:26, просмотров: 2716)
Изучал как IAR оптимизирует код и нашел, что не очень хорошо. Есть два варианта присвоения одного и тогоже значения нескольким переменным 1) PORTA_PIN1CTRL = 0x18; // KN3 PULLUP включить PORTA_PIN2CTRL = 0x18; // KN2 PULLUP включить PORTA_PIN3CTRL = 0x18; // KN1 PULLUP включить PORTB_PIN0CTRL = 0x18; // KN4 PULLUP включить PORTC_PIN2CTRL = 0x18; // Раскачка  TX, PULLUP включить (PC2) PORTC_PIN3CTRL = 0x18; // Раскачка  TX, PULLUP включить (PC3) 2) PORTA_PIN1CTRL = PORTA_PIN2CTRL = PORTA_PIN3CTRL = PORTB_PIN0CTRL = PORTC_PIN2CTRL = PORTC_PIN3CTRL = 0x18; IAR при включенной оптимизации по скорости или объему кода компилирует первый вариант так: 109 PORTA_PIN1CTRL = 0x18; // KN3 PULLUP включить \ 00000038 E108 LDI R16, 24 \ 0000003A 93000611 STS 1553, R16 110 PORTA_PIN2CTRL = 0x18; // KN2 PULLUP включить \ 0000003E E108 LDI R16, 24 \ 00000040 93000612 STS 1554, R16 111 PORTA_PIN3CTRL = 0x18; // KN1 PULLUP включить \ 00000044 E108 LDI R16, 24 \ 00000046 93000613 STS 1555, R16 112 PORTB_PIN0CTRL = 0x18; // KN4 PULLUP включить \ 0000004A E108 LDI R16, 24 \ 0000004C 93000630 STS 1584, R16 113 PORTC_PIN2CTRL = 0x18; // Раскачка  TX, PULLUP включить (PC2) \ 00000050 E108 LDI R16, 24 \ 00000052 93000652 STS 1618, R16 114 PORTC_PIN3CTRL = 0x18; // Раскачка  TX, PULLUP включить (PC3) \ 00000056 E108 LDI R16, 24 \ 00000058 93000653 STS 1619, R16 А второй вариант даже без оптимизации получается экономнее: 117 PORTA_PIN1CTRL = PORTA_PIN2CTRL = PORTA_PIN3CTRL = PORTB_PIN0CTRL = PORTC_PIN2CTRL = PORTC_PIN3CTRL = 0x18; \ 0000005C E108 LDI R16, 24 \ 0000005E 93000653 STS 1619, R16 \ 00000062 93000652 STS 1618, R16 \ 00000066 93000630 STS 1584, R16 \ 0000006A 93000613 STS 1555, R16 \ 0000006E 93000612 STS 1554, R16 \ 00000072 93000611 STS 1553, R16