clpe 0 26 марта, 2009 Опубликовано 26 марта, 2009 (изменено) · Жалоба 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 как будто одного цикла не хватает Изменено 26 марта, 2009 пользователем clpe Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 26 марта, 2009 Опубликовано 26 марта, 2009 · Жалоба А где два разных результата компиляции-то? ASMовые листинги приведите. В CodeVisionAVR, все как надо, а в IAR'e как будто одного цикла не хватаетСкорее всего вы про квалификатор volatile где-то забыли. Кстати, а что это за not в самом конце? while(not TESTBIT(DATA_PIN, DATA_DATA)); В СИ логическое отрицание вообще-то знаком ! обозначается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 26 марта, 2009 Опубликовано 26 марта, 2009 · Жалоба Что значит "разный результат"? Функция data_read возвращает разные значения? Следует заглянуть в ассемблерный код, который пораждают компиляторы для этой функции... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
clpe 0 26 марта, 2009 Опубликовано 26 марта, 2009 · Жалоба Скорее всего вы про квалификатор volatile где-то забыли. Кстати, а что это за not в самом конце? В СИ логическое отрицание вообще-то знаком ! обозначается. Подключил <iso646.h>. Что значит "разный результат"? Функция data_read возвращает разные значения? Следует заглянуть в ассемблерный код, который пораждают компиляторы для этой функции... Ага разные значения. Посмотрю ассемблерный код Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirYU 0 30 марта, 2009 Опубликовано 30 марта, 2009 · Жалоба А где два разных результата компиляции-то? ASMовые листинги приведите. Скорее всего вы про квалификатор volatile где-то забыли. Кстати, а что это за not в самом конце? В СИ логическое отрицание вообще-то знаком ! обозначается. Согласен с rezident-ом. IAR более интеллектульный и строгий. CV Си подобный. Надо смотреть асмовские листинги. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться