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

 
 
 
Reply to this topicStart new topic
meister
сообщение Dec 28 2007, 12:25
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Здравствуйте,

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

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


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

Спасибо.

Сообщение отредактировал meister - Dec 28 2007, 12:28
Go to the top of the page
 
+Quote Post
sergik_vrn
сообщение Dec 29 2007, 07:04
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 152
Регистрация: 11-10-05
Из: Воронеж
Пользователь №: 9 491



Цитата(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?

Сообщение отредактировал sergik_vrn - Dec 29 2007, 07:05
Go to the top of the page
 
+Quote Post

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

 


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


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