16+
Четверг
14 декабря
Вход |Карта сайта | |Upload |codebook | PARTS

 О смысле всего сущего 0xFF

 Средства и методы разработки

 Мобильная и беспроводная связь

 Блошиный рынок Объявления

caxapa

Микроконтроллеры ARM 

AVR PIC MSP PLD,FPGA,DSP 

Кибернетика Технологии 

Схемы, платы, компоненты 

Микроконтроллеры AVR

 
   Новая тема Правила Регистрация Поиск »» Архив
Вернуться в конференциюТопик полностью
misyachniy  (20.03.2017 16:01 - 20.03.2017 16:26, просмотров: 886)
Изучал как 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
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7526 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXVII