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

 
 
 
Reply to this topicStart new topic
> В чем разница компиляторов IAR и CodeVisionAVR, Один участок кода в разных компиляторах дает разный результат?
clpe
сообщение Mar 26 2009, 16:22
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 71
Регистрация: 23-10-08
Из: Набережные Челны
Пользователь №: 41 132



Код
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 - Mar 26 2009, 16:24
Go to the top of the page
 
+Quote Post
rezident
сообщение Mar 26 2009, 16:29
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



А где два разных результата компиляции-то? ASMовые листинги приведите.
Цитата(clpe @ Mar 26 2009, 21:22) *
В CodeVisionAVR, все как надо, а в IAR'e как будто одного цикла не хватает
Скорее всего вы про квалификатор volatile где-то забыли.
Кстати, а что это за not в самом конце?
Цитата
while(not TESTBIT(DATA_PIN, DATA_DATA));

В СИ логическое отрицание вообще-то знаком ! обозначается.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Mar 26 2009, 16:29
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Что значит "разный результат"? Функция data_read возвращает разные значения? Следует заглянуть в ассемблерный код, который пораждают компиляторы для этой функции...
Go to the top of the page
 
+Quote Post
clpe
сообщение Mar 26 2009, 22:10
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 71
Регистрация: 23-10-08
Из: Набережные Челны
Пользователь №: 41 132



Цитата(rezident @ Mar 26 2009, 19:29) *
Скорее всего вы про квалификатор volatile где-то забыли.
Кстати, а что это за not в самом конце?

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

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


Цитата(Палыч @ Mar 26 2009, 19:29) *
Что значит "разный результат"? Функция data_read возвращает разные значения? Следует заглянуть в ассемблерный код, который пораждают компиляторы для этой функции...

Ага разные значения. Посмотрю ассемблерный код
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Mar 30 2009, 05:16
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Цитата(rezident @ Mar 26 2009, 20:29) *
А где два разных результата компиляции-то? ASMовые листинги приведите.
Скорее всего вы про квалификатор volatile где-то забыли.
Кстати, а что это за not в самом конце?

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


Согласен с rezident-ом. IAR более интеллектульный и строгий. CV Си подобный. Надо смотреть асмовские листинги.
Go to the top of the page
 
+Quote Post

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

 


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


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