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

 
 
> TNKERNEL 2.7, переключение контекста после tn_sem_isignal
Intel4004
сообщение Feb 20 2015, 10:44
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 7-09-07
Из: Наб.Челны
Пользователь №: 30 364



Системный тик - 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 переключает контекст не сразу после освобождения семафора, а дожидается системного тика?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
megajohn
сообщение Feb 20 2015, 10:55
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143




void IRQ (void)
{
Board_Led2Clear();
tn_sem_isignal(Semaphore);
tn_int_exit();//должно помочь
}


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
Intel4004
сообщение Feb 20 2015, 11:06
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 7-09-07
Из: Наб.Челны
Пользователь №: 30 364



Цитата(megajohn @ Feb 20 2015, 13:55) *
tn_int_exit();//должно помочь

Спасибо. Это именно оно.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 23:38
Рейтинг@Mail.ru


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