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

 
 
6 страниц V  « < 3 4 5 6 >  
Reply to this topicStart new topic
> TNeo: тщательно протестированная РТОС для Cortex-M0/M0+/M3/M4/M4F, PIC24/dsPIC, PIC32MX.
ViKo
сообщение Jan 22 2015, 12:07
Сообщение #61


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(AHTOXA @ Jan 22 2015, 14:56) *
То есть, если одна задача захватит мьютекс при помощи wait(), то другая задача может его освободить, вызвав release()?

Нет. Мьютекс достается только одной задаче. Если одна задача получила мьютекс, то, значит, у другой его не было. То есть, и отдавать другой задаче нечего.
Я не пробовал выполнять osMutexRelease до его получения. Но, думаю, просто ничего не произойдет.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 22 2015, 15:37
Сообщение #62


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(ViKo @ Jan 22 2015, 17:07) *
Нет. Мьютекс достается только одной задаче.

Вот это и называется - задача владеет мьютексом. Захватила, и владеет единолично, пока не отдаст. Это я к вашей фразе
Цитата(ViKo @ Jan 22 2015, 15:01) *
И у него нет владельца. Не вижу принципиальной разницы с семафором.

Теперь видите разницу?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 22 2015, 16:51
Сообщение #63


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(AHTOXA @ Jan 22 2015, 18:37) *
Вот это и называется - задача владеет мьютексом. Захватила, и владеет единолично, пока не отдаст. Это я к вашей фразе
Теперь видите разницу?

Почитайте выше, что пишет топикстартер, У него мьютекс всегда принадлежит одной и той же задаче. Вот ему я и пишу, что у Кейла - не так. Мьютекс создает ОС, задачи им пользуются.

Перечитал сообщение 26. В начале говорится о заблокированном мьютексе, а потом уже просто о владельце. Я неправильно понял.
Go to the top of the page
 
+Quote Post
dimonomid
сообщение Jan 22 2015, 17:13
Сообщение #64


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 16-09-14
Пользователь №: 82 835



Цитата(ViKo @ Jan 22 2015, 21:51) *
Почитайте выше, что пишет топикстартер, У него мьютекс всегда принадлежит одной и той же задаче. Вот ему я и пишу, что у Кейла - не так. Мьютекс создает ОС, задачи им пользуются.

Вы меня совершенно неправильно поняли. Где именно я так неясно выразился?

Конечно, мютекс принадлежит той задаче, которая его захватила. Когда задача его разблокирует, он снова ничей.
А семафор ничей даже когда задача его "захватила" (в кавычках - потому что некорректный термин для семафора). И в этом главное отличие семафоров от мютексов.

Когда задача А заблокировала мютекс, задача Б не может его разблокировать.
Когда задача А "заблокировала" семафор, задача Б (или даже прерывание) может его "разблокировать".

Не знаю как у Кейла, может, и не так. Это не новость, что эти термины постоянно путаются, к сожалению. Ну еще раз дам ссылку на статью: Mutexes and Semaphores Demystified, почитайте там хотя бы The Myth: Mutexes and semaphores are similar or even interchangeable, а также The History of Semaphores and Mutexes.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 22 2015, 20:33
Сообщение #65


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Хотите семафоров? - их есть у Кейла. Как говорится, найдите отличие от мьютекса.
Прикрепленное изображение

То же, что в статье и dimonomid называют семафором, у Кейла выполняют "сигналы" (osSignalSet, osSignalClear, osSignalWait), они же в девичестве "события" (Event), они же "флаги". Они принадлежат задаче (по умолчанию у каждой задачи их 16 штук), и могут обрабатываться поодиночке или группой.

Еще предлагаю посмотреть документ от Кейла:
http://www.keil.com/product/brochures/rl-arm_gs.pdf
Синтаксис устарел, но принципы остались теми же. В-частности, там показано, как используются семафоры: Сигнализация, Мультиплекс, Рандеву, Турникет.
Go to the top of the page
 
+Quote Post
Valentine Logino...
сообщение Jan 23 2015, 06:49
Сообщение #66


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

Группа: Участник
Сообщений: 78
Регистрация: 7-04-10
Из: Пушкино
Пользователь №: 56 462



Ай пошли войны. Создали бы тему или блог какой и обсуждали бы краеугольные камни архитектуры ПО.
Мне бы больше хотелось увидеть сравнение времени переключения контекста от количества задач между TNeo и той же FreeRTOS (порт для pic32 wink.gif ) . Да и по памяти выделяемой на те же объекты синхронизации.
У меня пока что руки дошли запустить-помигать. Исходный код у проекта выглядит очень приятно. Попробую прикрутить гармониевский стек, заодно буду смотреть что у TNeo с менеджером динамической памяти.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 23 2015, 07:04
Сообщение #67


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Нашел принципиальное отличие мьютекса от семафора.
Мьютекс при инициализации получает значение (условно) 1. При использовании, когда мьютекс забирается, он становится равным 0. Когда возвращается, снова 1.
Семафор при инициализации может получить любое значение, N, в том числе и 0 (закрыт). Вот этот 0 и позволяет использовать семафор в различных иных применениях, кроме доступа к ограниченному количеству ресурсов.
Так что, разница есть. Но и говорить, что мьютекс - частный случай семафора - тоже верно.
Go to the top of the page
 
+Quote Post
LightElf
сообщение Jan 23 2015, 12:01
Сообщение #68


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

Группа: Участник
Сообщений: 180
Регистрация: 5-04-09
Пользователь №: 47 205



QUOTE (ViKo @ Jan 23 2015, 11:04) *
Так что, разница есть. Но и говорить, что мьютекс - частный случай семафора - тоже верно.

Принципиальная разница в том, что освободить мьютекс может только тот, кто им в настоящий момент владеет. У семафора нет такого ограничения.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jan 23 2015, 12:42
Сообщение #69


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(LightElf @ Jan 23 2015, 15:01) *
Принципиальная разница в том, что освободить мьютекс может только тот, кто им в настоящий момент владеет. У семафора нет такого ограничения.

Точно.
Go to the top of the page
 
+Quote Post
zaicev_ekb
сообщение Feb 9 2015, 10:47
Сообщение #70


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 28-04-14
Из: Екатеринбург
Пользователь №: 81 530



Прошу прошения.
А почему такой древний компилятор XC32 v1.21?
Go to the top of the page
 
+Quote Post
dimonomid
сообщение Feb 9 2015, 16:30
Сообщение #71


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 16-09-14
Пользователь №: 82 835



Цитата(zaicev_ekb @ Feb 9 2015, 15:47) *
Прошу прошения.
А почему такой древний компилятор XC32 v1.21?

Нет особых причин, соберите новым компилятором, проблем быть не должно.
Go to the top of the page
 
+Quote Post
dimonomid
сообщение Apr 7 2015, 23:58
Сообщение #72


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 16-09-14
Пользователь №: 82 835



Насчет FreeRTOS:

Цитата(Mahagam @ Jan 20 2015, 12:17) *
Aner, фриртос действительно тормознее других переключалок. в некоторых моментах - существенно. после одного из таких сравнений задали вопрос автору. в итоге в лицензии фриртос появился пункт запрещающий её сравнивать с другими )))

Цитата(Aner @ Jan 20 2015, 14:20) *
кроме bla-bla-bla пример тормознутости в студию!

Цитата(dimonomid @ Jan 20 2015, 02:14) *
Если я заморочусь когда-нибудь на подобное сравнение, я напишу. Пока нечего сказать.

Ради интереса, таки провел сравнение, вопреки лицензии FreeRTOS. Пример простейший: две задачи: А (высокоприоритетная) и B (низкоприоритетная). А ждет семафора, B через определенный интервал сигналит семафором. Т.к. А высокоприоритетная, то как только B сигналит семафором, управление передается задаче А.

Измерял время от момента вызова сервиса сигнализирования из задачи B до получения управления задачей А.

В TNeo: 624 тиков (594 с отключенной проверкой переполнения стека),
в FreeRTOS: 1215 тиков (1075 с отключенной проверкой переполнения стека).
UPD: в FreeRTOS: 863 тиков (699 с отключенной проверкой переполнения стека). Я по запаре накосячил с измерениями первый раз, см. след. сообщение.

Измерения производились на PIC32MX с помощью stopwatch в MPLABX.

TNeo:
Код
volatile int i;

/*
* Low-priority task (2). The lower value, the higher priority.
*/
void task_b_body(void *par)
{
   for(;;)
   {
      tn_task_sleep(10);
      i = 0;   //-- stopwatch start
      tn_sem_signal(&sem);
   }
}

/*
* High-priority task (1). The lower value, the higher priority.
*/
void task_a_body(void *par)
{
   for(;;)
   {
      tn_sem_wait(&sem, TN_WAIT_INFINITE);
      i = 1;   //-- stopwatch stop: 624 cycles (594 without stack overflow check)
   }
}


FreeRTOS:
Код
volatile int i;

/*
* Low-priority task (tskIDLE_PRIORITY + 1)
*/
void prvTaskB (void* pvParameters)
{
   for (;;) {
      vTaskDelay(10);
      i = 1;   //-- stopwatch start
      xSemaphoreGive( mySem );
   }
}

/*
* High-priority task (tskIDLE_PRIORITY + 2)
*/
void prvTaskA (void* pvParameters)
{        
   for (;;) {
      xSemaphoreTake( mySem, portMAX_DELAY );
      i = 0;   //-- stopwatch stop: 863 cycles (624 without stack overflow check)
   }
}


Сообщение отредактировал dimonomid - Apr 8 2015, 09:59
Go to the top of the page
 
+Quote Post
dimonomid
сообщение Apr 8 2015, 10:03
Сообщение #73


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 16-09-14
Пользователь №: 82 835



Так, отставить, я ерунду написал в прошлом сообщении: для TNeo-то я взял существующий настроенный проект, а для FreeRTOS создал новый, и забыл в нем оптимизацию включить. Пардон.

Так что отличия поскромнее:

В TNeo: 624 тиков (594 с отключенной проверкой переполнения стека),
в FreeRTOS: 863 тиков (699 с отключенной проверкой переполнения стека).
Go to the top of the page
 
+Quote Post
LightElf
сообщение Apr 8 2015, 13:42
Сообщение #74


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

Группа: Участник
Сообщений: 180
Регистрация: 5-04-09
Пользователь №: 47 205



QUOTE (dimonomid @ Apr 8 2015, 13:03) *
Так, отставить, я ерунду написал в прошлом сообщении: для TNeo-то я взял существующий настроенный проект, а для FreeRTOS создал новый, и забыл в нем оптимизацию включить. Пардон.

Так что отличия поскромнее:

В TNeo: 624 тиков (594 с отключенной проверкой переполнения стека),
в FreeRTOS: 863 тиков (699 с отключенной проверкой переполнения стека).

Насколько я помню, автор FreeRTOS всегда упирал на большую предсказуемость. Т.е. две задачи - не показатель, а вот что будет с 20 задачами - вопрос интересный.
Простой пример: TNeo реализует таймеры как callback-и из обработчика таймерного прерывания (я не ошибся?). Какой смысл говорить о времени переключения контекста в таком раскладе? Переключение реально не произойдет до тех пор, пока не будут отработаны все таймеры. Т.е. задержка не детерминирована, совсем.

Сообщение отредактировал LightElf - Apr 8 2015, 14:20
Go to the top of the page
 
+Quote Post
dimonomid
сообщение Apr 8 2015, 14:02
Сообщение #75


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 16-09-14
Пользователь №: 82 835



Цитата(LightElf @ Apr 8 2015, 17:42) *
Насколько я помню, автор FreeRTOS всегда упирал на большую предсказуемость. Т.е. две задачи - не показатель, а вот что будет с 20 задачами - вопрос интересный.

Как в FreeRTOS - не знаю, а в TNeo, как и в TNKernel, количество задач не влияет на скорость переключения контекста: для каждого приоритета есть связанный список задач, готовых к запуску. И есть битовая маска, каждый бит которой отражает приоритет, в котором есть готовые к запуску задачи. Таким образом, когда ядро выясняет, какую задачу нужно запустить, оно делает следующее:

- Находит номер младшего установленного бита в маске. Некоторые архитектуры имеют специальную инструкцию для этой операции (Find first set). Если такой инструкции нет, то приходится вручную проверять каждый бит, но тогда время выполнения зависит не от количества задач, а от количества приоритетов.
- Передает управление первой задаче из связанного списка для соответствующего приоритета. Время константное.

Цитата(LightElf @ Apr 8 2015, 17:42) *
Особенно такой скользкий параметр, как максимальная задержка входа в прерывание.

От количества задач эта задержка тоже не зависит.

Сообщение отредактировал dimonomid - Apr 8 2015, 14:16
Go to the top of the page
 
+Quote Post

6 страниц V  « < 3 4 5 6 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 04:37
Рейтинг@Mail.ru


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