Easyelectronics.ru

Электроника для всех
Текущее время: 26 фев 2021, 03:34

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: FREERTOS Семафор срабатывает самостоятельно
СообщениеДобавлено: 24 апр 2019, 18:53 
Только пришел

Зарегистрирован: 11 дек 2013, 15:07
Сообщения: 20
Уважаемые коллеги!
Не понимаю, что происходит с семафором. Объявил семафор в main
Код:
  osSemaphoreDef(dataReceivedSem);
  dataReceivedSemHandle=osSemaphoreCreate(osSemaphore(dataReceivedSem), 1);

В задаче жду семафора:
Код:
void StartDataKeeperTask (void const * argument){
  uint8_t state =0;
 
  for(;;)
  {
      if (osSemaphoreWait(dataReceivedSemHandle, portMAX_DELAY)==osOK){
          state=1;
          printf ("DataKeeper state: %u\r\n", state);
       }
   }
}

Так вот. Он срабатывает даже без выдачи семафора из другой задачи функцией
Код:
osSemaphoreRelease(dataReceivedSemHandle);
, сам по себе
Что я делаю не так, кто подскажет?
Заранее благодарю за ответы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FREERTOS Семафор срабатывает самостоятельно
СообщениеДобавлено: 24 апр 2019, 19:22 
Старожил
Аватара пользователя

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 964
А как так получается что объявили в одной функции а пытаетесь использовать переменную в другой???
Или я чего-то не понял??


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FREERTOS Семафор срабатывает самостоятельно
СообщениеДобавлено: 24 апр 2019, 20:49 
Только пришел

Зарегистрирован: 11 дек 2013, 15:07
Сообщения: 20
Ну так переменная - это идентификатор семафора. А семафор это часть ядра операционной системы, соответственно, доступна изо всех задач RTOS


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FREERTOS Семафор срабатывает самостоятельно
СообщениеДобавлено: 24 апр 2019, 21:04 
Старожил

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 4198
...и этот идентификатор, представляющий собой переменную, должен быть объявлен глобально, чтобы по законам языка Си был виден в любой ф-ции. Соблюдайте законы языка Си!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FREERTOS Семафор срабатывает самостоятельно
СообщениеДобавлено: 24 апр 2019, 21:10 
Только пришел

Зарегистрирован: 11 дек 2013, 15:07
Сообщения: 20
Разобрался. В osSemaphoreCreate есть вот что:
Код:
#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )
   #define vSemaphoreCreateBinary( xSemaphore )                                                                     
      {                                                                                                   
         ( xSemaphore ) = xQueueGenericCreate( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE );   \
         if( ( xSemaphore ) != NULL )                                                                           
         {                                                                                                
            ( void ) xSemaphoreGive( ( xSemaphore ) );                                                            
         }                                                                                                
      }
#endif

То есть семафор выдается сразу при создании. Непонятно, зачем. Ладно, тогда сразу заберу после создания.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB