Перейти к содержанию
    

В чем разница компиляторов IAR и CodeVisionAVR

unsigned int data_read(unsigned char databits)
{
  unsigned int data = 0;
  unsigned char i;

  __disable_interrupt();

  CLEARBIT(DATA_PORT, DATA_CLOCK);
  __no_operation();
  __no_operation();
  __no_operation();
  __no_operation();
  __no_operation();
  __no_operation();
  __no_operation();
  __no_operation();

  for(i=databits; i>0; i--)
  {
    SETBIT(DATA_PORT, DATA_CLOCK);
    __no_operation();
    __no_operation();
    __no_operation();
    __no_operation();
    __no_operation();
    __no_operation();
    __no_operation();
    __no_operation();
    if(TESTBIT(DATA_PIN, DATA_DATA))
      data++;
    CLEARBIT(DATA_PORT, DATA_CLOCK);
    __no_operation();
    __no_operation();
    __no_operation();
    __no_operation();
    __no_operation();
    __no_operation();
    __no_operation();
    __no_operation();
    data <<= 1;
  }
  data >>= 1;

  __enable_interrupt();

  // Окончание запроса координаты
  while(not TESTBIT(DATA_PIN, DATA_DATA));
  SETBIT(DATA_PORT, DATA_CLOCK);

  return data;
}

В CodeVisionAVR, все как надо, а в IAR'e как будто одного цикла не хватает

Изменено пользователем clpe

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А где два разных результата компиляции-то? ASMовые листинги приведите.

В CodeVisionAVR, все как надо, а в IAR'e как будто одного цикла не хватает
Скорее всего вы про квалификатор volatile где-то забыли.

Кстати, а что это за not в самом конце?

while(not TESTBIT(DATA_PIN, DATA_DATA));

В СИ логическое отрицание вообще-то знаком ! обозначается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что значит "разный результат"? Функция data_read возвращает разные значения? Следует заглянуть в ассемблерный код, который пораждают компиляторы для этой функции...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скорее всего вы про квалификатор volatile где-то забыли.

Кстати, а что это за not в самом конце?

 

В СИ логическое отрицание вообще-то знаком ! обозначается.

Подключил <iso646.h>.

 

 

Что значит "разный результат"? Функция data_read возвращает разные значения? Следует заглянуть в ассемблерный код, который пораждают компиляторы для этой функции...

Ага разные значения. Посмотрю ассемблерный код

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А где два разных результата компиляции-то? ASMовые листинги приведите.

Скорее всего вы про квалификатор volatile где-то забыли.

Кстати, а что это за not в самом конце?

 

В СИ логическое отрицание вообще-то знаком ! обозначается.

 

Согласен с rezident-ом. IAR более интеллектульный и строгий. CV Си подобный. Надо смотреть асмовские листинги.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...