Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

STM32F103 + FreeRTOS + HAL CUBE Семафор не блокирует задачу

Пт июл 20, 2018 10:28:35

Всем привет.
Не получается заблочить задачу. Семафор ни где не выдаётся, но задача всё равно выполняется.
Код:
/* StartRxMsgTask function */
void StartRxMsgTask(void const * argument)
{
  /* USER CODE BEGIN StartRxMsgTask */
  /* Infinite loop */
  for(;;)
  {
      osSemaphoreWait(NewMsgFromCtsBinarySemHandle, 0);
      osDelay(1);

  }
  /* USER CODE END StartRxMsgTask */
}


Семафор создаётся средствами куба.
Код:
osSemaphoreId NewMsgFromCtsBinarySemHandle;

osSemaphoreDef(NewMsgFromCtsBinarySem);
NewMsgFromCtsBinarySemHandle = osSemaphoreCreate(osSemaphore(NewMsgFromCtsBinarySem), 1);

Re: STM32F103 + FreeRTOS + HAL CUBE Семафор не блокирует зад

Пт июл 20, 2018 12:37:57

Судя по всему, второй аргумент функции osSemaphoreWait - тймаут. А у Вас он равен нулю.

Re: STM32F103 + FreeRTOS + HAL CUBE Семафор не блокирует зад

Пт июл 20, 2018 12:41:45

Это скорей вопрос к разработчикам куба.

А почему бы не подключить FreeRTOS последней версии к проекту и использовать вместо семафоров task notification. https://www.freertos.org/RTOS-task-notifications.html

По поводу параметра таймаута пишут "Timout Value or 0 in case of no time-out". Что значит 0 - не понятно. Если он значит, что таймаут бесконечный, то в настройках ртос должен быть включен параметр vTaskSuspend.

Upd.

Если 0 - блокировка не происходит. Для вечной блокировки нужно указать osWaitForever :)))

Re: STM32F103 + FreeRTOS + HAL CUBE Семафор не блокирует зад

Пт июл 20, 2018 13:32:51

Ппц. Спасибо за подсказку )))
Я решил раз влез в ХАЛ, то и делать все в нем. Уже проклял тот момент, когда сел за баранку этого пылесоса. )) Попробую в понедельник .
Ответить