Кто любит RISC в жизни, заходим, не стесняемся.
Пт июл 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);
Пт июл 20, 2018 12:37:57
Судя по всему, второй аргумент функции osSemaphoreWait - тймаут. А у Вас он равен нулю.
Пт июл 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
Пт июл 20, 2018 13:32:51
Ппц. Спасибо за подсказку )))
Я решил раз влез в ХАЛ, то и делать все в нем. Уже проклял тот момент, когда сел за баранку этого пылесоса. )) Попробую в понедельник .
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.