Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Timer1 ISR T1IR (LPC2146)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
meister
Здравствуйте,

такое впечатление, что происходит какая-то мистика (__irq нет потому что эта функция вызывается из ассемблера. она работает, но "плохо"):

Код
extern "C" __arm void irq_timer1_handler_impl(void)
{
    do
    {
        [...]
    }
    while (T1IR > 0);
    assert(0 == T1IR);
    VICVectAddr = 0;
}


Вылетает в assert (в T1IR есть ненулевые биты). Как такое может быть (break и return в теле цикла нет)?

Спасибо.
sergik_vrn
Цитата(meister @ Dec 28 2007, 15:25) *
Код
extern "C" __arm void irq_timer1_handler_impl(void)
{
    do
    {
        [...]
    }
    while (T1IR > 0);
    assert(0 == T1IR);
    VICVectAddr = 0;
}


Вылетает в assert (в T1IR есть ненулевые биты). Как такое может быть (break и return в теле цикла нет)?

Спасибо.

ну теоретически это возможно. T1IR же volatile, может, флаг прерывания поднимается как раз после выполнения очередного сравнения T1IR > 0. кстати, а почему >0 а не != 0?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.