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

if(((time_cpu.secn & 0x0f)+1)==10)//=10 секунд?
{
if(((time_cpu.secn & 0xf0)+1)==0x60)//=60 секунд?
{
//установить флаг f_sinctime=1
time_cpu.secn++;//команда вставлена, чтобы компилятор не вырезал код
}
else
{
time_cpu.secn += 0x10;
};
}
else
{
time_cpu.secn++;
};

Выбрасывает
if(((time_cpu.secn & 0xf0)+1)==0x60)//=60 секунд?
{
//установить флаг f_sinctime=1
time_cpu.secn++;//команда вставлена, чтобы компилятор не вырезал код
}

Может сам что сглупил, ночь не спал... Но вроде не должно выкидывать код...
viakon
Условие (((time_cpu.secn & 0xf0)+1)==0x60) невыполнимо ни при каких значениях time_cpu.secn вот оптимизатор и выбрасывает ненужный код
John
Попробуй так
if(((time_cpu.secn & 0xf0)+ 0x10 )==0x60)//=60 секунд?

или что нибудь по проще, например:

time_cpu.secn++;//инкремент раз в секунду

if(time_cpu.secn%10 == 0)
{
//10 секундное событие
}

if(time_cpu.secn%60 == 0)
{
//60 секундное событие
time_cpu.secn = 0;
}
SZ0
if(((time_cpu.secn & 0xf0)+ 0x10)==0x60) //=60 секунд

Именно это условие и заработало! Просто скопировал верхнее, а корректно код не поправил. Кстати, может быть частой ошибкой - копируем похожий код, а правим не всё корректно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.