Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
Нужна помощь с Keil ARM С++ LPC2366 :(
Отправлено
Yaumen
16 апреля 2009, г. 16:15
Подскажите можно ли вызывать из обработчиков прерывания функции или нет!? Проблема в том, что Вот этот код работает:
CSimpleClass m_Modes;
void Timer0Handler() __irq
{
T0IR = 1; /* clear interrupt flag */
IENABLE; /* handles nested interrupt */
m_Modes.m_byCounter_10ms++;
IDISABLE;
VICVectAddr = 0; /* Acknowledge Interrupt */
}
А Вот этот НЕ работает:
CSimpleClass m_Modes;
void Timer0Handler() __irq
{
T0IR = 1; /* clear interrupt flag */
IENABLE; /* handles nested interrupt */
m_Modes.New_10ms();
IDISABLE;
VICVectAddr = 0; /* Acknowledge Interrupt */
}
void CSimpleClass::New_10ms()
{
m_byCounter_10ms++;
}
Составить ответ
|
Вернуться на конференцию.
Ответы
Ответ: IENABLE; IDISABLE; это что макросы для запуска вложенных прерываний. Думаю проблема в них. Я по крайней мере их не исползую и всё работает.
-
progchip
(16.04.2009, 16:53:15
80.92.96.55
,
пустое
)
В примерах Keil везде используются эти макросы. Даже не знаю теперь нужны они или нет
-
Yaumen
(16.04.2009, 17:05:4
212.98.174.229
, 496 байт)
Ответ: Сам такого не использовал, но если у тебя несколько источников прерываний которые обработка которых может перекрываться и ты хочешь чтобы одно прерывание другое могло прерывать нужно разбираться. Если нет - можно забить.
-
progchip
(16.04.2009, 17:17:17
80.92.96.55
,
пустое
)
Ответ: При этом возникает проблема приоритетов, поскольку если разрешить вложенные прерывания без специальных мер то низкоприоритетные прерывания могут прерывать высокоприоритетные, насколько я понял. На практике не проверял.
-
progchip
(16.04.2009, 17:21:37
80.92.96.55
,
пустое
)
ОК, спасибо. Без них действительно программа работает.
-
Yaumen
(16.04.2009, 17:51:4
212.98.174.229
,
пустое
)
Ответ: Вызываются без проблем. Что значит не работает. Не компилится или в симуляторе не исполняется?
-
progchip
(16.04.2009, 16:25:34
80.92.96.55
,
пустое
)
Если смотреть в дизассемблере, то по окончанию New_10ms(), программа не возвращается назад в процедуру прерывания ...
-
Yaumen
(16.04.2009, 16:32:24
212.98.174.229
, 101 байт)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 654:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru