Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: TNKERNEL 2.7, переключение контекста после tn_sem_isignal
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
Intel4004
Системный тик - 1Hz.
Проц - cortexM3 (stm32).
В программе зажигаю два светодиода и жду семафор. Дождавшись тушу один светодиод.
Через единицы миллисекунд после вызова tn_sem_acquire вызывается прерывание, в котором тушу второй светодиод и вызываю tn_sem_isignal.
Кусок кода:

Код
void func (void)
{
Board_Led1Set();
Board_Led2Set();
tn_sem_acquire(Semaphore, 1000);
Board_Led1Clear();
}

void IRQ (void)
{
Board_Led2Clear();
tn_sem_isignal(Semaphore);
}


Вижу, что второй(который тушится из прерывания) как ему и положено загорается на очень короткое время.
Зато первый горит секунду.
Таск самый высокоприоритетный (единственный sm.gif

Получается что tnkernel переключает контекст не сразу после освобождения семафора, а дожидается системного тика?
megajohn

void IRQ (void)
{
Board_Led2Clear();
tn_sem_isignal(Semaphore);
tn_int_exit();//должно помочь
}
Intel4004
Цитата(megajohn @ Feb 20 2015, 13:55) *
tn_int_exit();//должно помочь

Спасибо. Это именно оно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.