Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR C
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
volod_ua
Вот такой код у меня

for(i=0;i<128;i++)
{
roll_bits(bytes);
if((bytes[0] == 0xFF) &&(bytes[1] == 0x80))
{
flag=1;
break;
}
};
а что компилируєт ИАР

for(i=0;i<128;i++)
{
roll_bits(bytes);
};

почему оптимизация отключена....что не так
haker_fox
Please, вышлите больше инфы (что такое roll_bits(), как определен bytes, возможно еще что-то). Мой скромный опыт не позволяет Вам ответить на вопрос, хотя очень интересно.
Кстати, а где Вы увидели, что компилирует IAR?
Olxx
По какой-то причине IAR считает, что условие (bytes[0] == 0xFF) &&(bytes[1] == 0x80) невыполнимо (это может происходить по разным причинам, надо больше исходной информации).
Самый простой совет - попробуйте обьявит массив bytes как "volatile". В этом случае компилятор перестанет оптимизировать все что связано с "bytes".
Pat
Цитата(volod_ua @ Oct 8 2005, 00:03)
почему оптимизация отключена....что не так
*

Что значит оптимизация отключена, IAR может выкинуть кусок кода наоборот, когда включена оптимизация.
Если у вас стоит максимальный уровень оптимизауции, то попробуйте ее снизить.
Как тут советуют попробуйте объявить переменную как volatile.

У меня IAR3.20 такй ерундой страдал при сравнении ставил команду cmp
а вот переход после нее делать забывал.
smile.gif Я когда первый раз собрал на нем свой проект, скомпилил смотрю во класс, он мне код ужал процентов на 20 от исходного. Вот только ничего не работало. smile.gif
vzyk
Возможно что bytes[] масив обозначенн как константа? Просто пиши "violatile" или "static", и всё будет хорошо.
vet
Как объявлен bytes[]? signed или unsigned char?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.