|
vTaskSuspendAll или taskENTER_CRITICAL, что лучше использовать ? |
|
|
|
Jul 20 2015, 11:50
|

Гуру
     
Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702

|
Подскажите, что лучше использовать например при создании задачи и других подобных случаях, vTaskSuspendAll или taskENTER_CRITICAL ? Задачи создаются и удаляются регулярно. Посмотрел код, taskENTER_CRITICAL taskEXET_CRITICAL короче, и стало быть выполняется быстрее. Если запрещение прерываний ни чему не мешает, то стало быть из соображений скорости нужно использовать taskENTER_CRITICAL, а про vTaskSuspendAll вообще забыть, я верно рассуждаю ? Код vTaskSuspendAll(); // taskENTER_CRITICAL();
if(v_Task1_Handle==NULL) xTaskCreate(v_Task1,"v_Task1", 100 , NULL , tskIDLE_PRIORITY + 1, &v_Task1_Handle);
vTaskResumeAll(); //taskEXET_CRITICAL();
--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
|
|
|
|
|
 |
Ответов
|
Jul 24 2015, 07:25
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (MiklPolikov @ Jul 20 2015, 14:50)  Подскажите, что лучше использовать например при создании задачи При создании и удалении задачи вообще ничего из этого использовать не требуется в принципе. Вся критическая работа обеспечиватся собственно функциями создания и удаления задач и критическая секция внутри этих функций невелика о обеспечивается запрещением прерываний. Заложен так-же механизм удаления задачей самой себя. Так-никаких обрамлений НЕ ТРЕБУЕТСЯ. QUOTE и других подобных случаях Получается, что "подобные случаи" оказались совершенно НЕ описанными  и советовать что либо невозможно. Из личного опыта мног-много постоянного использования FreeRTOS подобной системы, воспользоваться vTaskSuspendAll() как-то не приходилось. Хотя, конечно, система в которой я работаю, уже заметно отличается от исходной FreeRTOS в части добавления разных более узкоспециализированных системных вызовов нацеленых в том числе и на вызов из прерываний и на уменьшене длительности критических секций.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 24 2015, 08:15
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (MiklPolikov @ Jul 24 2015, 11:06)  А что если в момент после проверки условия if(v_Task1_Handle==NULL) но перед созданием задачи v_Task1_Handle изменится ? Какая-то задача создаст эту задачу, или удалит ? При удалении задачи по указателю это ещё критичнее, т.к. если указатель стал 0, то удалится совсем другая задача, и будет непоправимый глюк. Господи! А какого черта так строить систему, что какие-то множественные задачи с неведомыми приоритетами наперегонки с друг другом могут создавать и убивать одну и ту-же задачу? Даже если такой ужас как-то вдруг может быть обоснован, то по любому система на то и система, что имеет разграничение доступа - создайте очередь, семафор,..... Да и сам v_Task1_Handle может на крайний случай флагом работать - кроме NULL еще одно волшебное значене ему заведите. Если куча задач только и занимается созданием и гроханием задачи, то может ее вообще не убивать - пусть себе живет.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 24 2015, 08:53
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (MiklPolikov @ Jul 24 2015, 11:36)  Но для пущей уверенности... Ну все-же определитесь, либо надо, либо не надо. Если "надо", то тогда думайте, как изменить подход к решению задачи. Если не надо, то тогда к чему все эти телодвижения? Пока похоже на "не знаю", посему буду делать всякие разные вещи которые может помогут от того, что я не знаю. Ситуация по крупному ничем не отличается от принесения, на всякий случай, в жертву барана  .
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
MiklPolikov vTaskSuspendAll или taskENTER_CRITICAL Jul 20 2015, 11:50 nill Всё зависит от задачи. taskENTER_CRITICAL действуе... Jul 24 2015, 06:34 zltigo Да, еще в догонку - taskENTER_CRITICAL() для ... Jul 24 2015, 11:07 Непомнящий Евгений Цитата(zltigo @ Jul 24 2015, 14:07) Да, е... Jul 27 2015, 04:33  MiklPolikov Всё-таки ясности так и нету.
В описании функций t... Aug 3 2015, 15:53   Непомнящий Евгений Цитата(MiklPolikov @ Aug 3 2015, 18:53) В... Aug 4 2015, 04:23   zltigo QUOTE (MiklPolikov @ Aug 3 2015, 18:53) В... Aug 4 2015, 07:53
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|