реклама на сайте
подробности

 
 
> Непонятки с оптимизацией
Allregia
сообщение Dec 6 2009, 13:18
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Читаю в цикле с SPI:

Код
       for (j=0; j<(BLen/2);j++){
  
         U0IFG &= ~URXIFG0;               // reset flag
         U0TXBUF = 0;                        // data request
         while ( !( U0IFG & URXIFG0 )); // Waiting for URXIFG0
         BEven = U0RXBUF;                  // read 1st
  
  
         U0IFG &= ~URXIFG0;               // reset flag
         U0TXBUF = 0;                        // data request
         while ( !( U0IFG & URXIFG0 )); // Waiting for URXIFG0
         BOdd = U0RXBUF;                       // read 1st
  
         if(BOdd!=~BEven)           done=false;


Компилируется это в:
Код
     for (i=0; i<(BUF_LENGTH/2);i++){
  00592A   0F43          clr.w   R15
     for (i=0; i<(BUF_LENGTH/2);i++){
  00592C   3F900040      cmp.w   #0x4000,R15
  005930   2B2C          jc      0x5988
       U0IFG &= ~URXIFG0;   // reset flag
  005932   F2C040000200  bic.b   #0x40,&IFG1
       U0TXBUF = 0;                  // data request
  005938   C2437700      clr.b   &U0TXBUF
       while ( !( U0IFG & URXIFG0 )); // Waiting for URXIFG0
  00593C   F2B040000200  bit.b   #0x40,&IFG1
  005942   FC2B          jnc     0x593C
       BEven = U0RXBUF;                 // read 1st
  005944   D24276005012  mov.b   &U0RXBUF,&BEven
       U0IFG &= ~URXIFG0;   // reset flag
  00594A   F2C040000200  bic.b   #0x40,&IFG1
       U0TXBUF = 0;                  // data request
  005950   C2437700      clr.b   &U0TXBUF
       while ( !( U0IFG & URXIFG0 )); // Waiting for URXIFG0
  005954   F2B040000200  bit.b   #0x40,&IFG1
  00595A   FC2B          jnc     0x5954
       BOdd = U0RXBUF;                 // read 1st
  00595C   D24276005112  mov.b   &U0RXBUF,&BOdd



Теперь включаю оптимизацию (max speed):
Код
     for (i=0; i<(BUF_LENGTH/2);i++){
  005612   0F43          clr.w   R15
       U0IFG &= ~URXIFG0;   // reset flag
  005614   F2C040000200  bic.b   #0x40,&IFG1
       U0TXBUF = 0;                  // data request
  00561A   C2437700      clr.b   &U0TXBUF
       while ( !( U0IFG & URXIFG0 )); // Waiting for URXIFG0
  00561E   F2B040000200  bit.b   #0x40,&IFG1
  005624   FC2B          jnc     0x561E
       BEven = U0RXBUF;                 // read 1st
  005626   5E427600      mov.b   &U0RXBUF,R14
  00562A   C24E5012      mov.b   R14,&BEven

       U0IFG &= ~URXIFG0;   // reset flag
  00562E   F2C040000200  bic.b   #0x40,&IFG1
       U0TXBUF = 0;                  // data request
  005634   C2437700      clr.b   &U0TXBUF
       while ( !( U0IFG & URXIFG0 )); // Waiting for URXIFG0
  005638   F2B040000200  bit.b   #0x40,&IFG1
  00563E   FC2B          jnc     0x5638
       BOdd = U0RXBUF;                 // read 1st
  005640   C24E5112      mov.b   R14,&BOdd


И разумеется, все перестает работать, ибо перед последней строчкой должно быть:
mov.b &U0RXBUF,R14

Переменные обьявлены как глобальные:
char dh,dl;

Вопрос - я что-то неправильно делаю, или это глюки IAR'а ?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 06:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01466 секунд с 7
ELECTRONIX ©2004-2016