Jump to content

    
Sign in to follow this  
zemlemer

прерывания с CMSIS-RTOS

Recommended Posts

Добрый день.

 

У меня произошла неудачная попытка подружиться с CMSIS-RTOS.

 

Что было сделано:

Запустил Cube, указал использование cmsis-rtos v1, сделал инициализацию пинов и одного таймера. В программе 2 треда и один семафор.

Проверил корректность переключения между задачами — работает. Запустил таймер и прерывание таймера, указав приоритет — работает.

/* USER CODE BEGIN TIM3_Init 2 */

HAL_NVIC_SetPriority(TIM3_IRQn, (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY + 1), 0);

HAL_TIM_Base_Start_IT(&htim3);

/* USER CODE END TIM3_Init 2 */

В таймере лампочки моргают.

Но как только в обработчике прерывания появляется строчка //osSemaphoreRelease(myBinarySemHandle), (согласно документации эта функция имеет право вызываться из прерывания) все намертво встает. Вроде делаю все правильно. В чем может быть причина?

 

Share this post


Link to post
Share on other sites
13 minutes ago, zemlemer said:

В чем может быть причина?

А какая оська реально-то крутится? Запуститесь под отладчиком, посмотрите, что вызывается вместо osSemaphoreRelease. А семафор вы удачно создаёте перед тем, как его использовать? Есть какие-либо средства верификации?

16 minutes ago, zemlemer said:

configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY

Очень похоже, что это FreeRTOS. Тогда для того, чтобы взывать API из прерывания, имя функции должно оканчиваться на FromISR.

Перед этим должна быть вызвана xSemaphroeCreateBinary, и на выходе вернуть ненулевой хэндл.

Рекомендую также включить configASSERTы, и сконфигурировать аварийный вывод куда-нить, например в консоль.

Вообще с отдачей семафоров из прерываний у это оси нет. Я это регулярно делаю. Ну, конечно, при соблюдении всех вышесказанных моментов.

Share this post


Link to post
Share on other sites
7 minutes ago, haker_fox said:

А какая оська реально-то крутится? Запуститесь под отладчиком, посмотрите, что вызывается вместо osSemaphoreRelease. А семафор вы удачно создаёте перед тем, как его использовать? Есть какие-либо средства верификации?

CMSIS-RTOS. - Это STM-овская надстройка над FreeRTOS.

7 minutes ago, haker_fox said:

Очень похоже, что это FreeRTOS. Тогда для того, чтобы взывать API из прерывания, имя функции должно оканчиваться на FromISR.

Перед этим должна быть вызвана xSemaphroeCreateBinary, и на выходе вернуть ненулевой хэндл.

Рекомендую также включить configASSERTы, и сконфигурировать аварийный вывод куда-нить, например в консоль.

Вообще с отдачей семафоров из прерываний у это оси нет. Я это регулярно делаю. Ну, конечно, при соблюдении всех вышесказанных моментов.

Согласно CMSIS

osStatus osSemaphoreRelease
	(	osSemaphoreId 	semaphore_id
	)	

Parameters
    [in]	semaphore_id	semaphore object referenced with osSemaphoreCreate.

Returns
    status code that indicates the execution status of the function.

Release a Semaphore token. This increments the count of available semaphore tokens.

Note
    Interrupt Service Routines can call this function.

Что интересно - комментирование configASSERT помогло.

           
 

 

Share this post


Link to post
Share on other sites
2 minutes ago, zemlemer said:

Что интересно - комментирование configASSERT помогло

Это ещё ничего не значит. Посмотрите содержимое макроса. Может быть он вам хочется сказать о проблеме, но из-за не настроенного вывода вы этого не видите. configASSERT очень удобный инструмент отладки FreeRTOS, и принебрегать им совершенно недопустимо.

Share this post


Link to post
Share on other sites
1 hour ago, haker_fox said:

Это ещё ничего не значит. Посмотрите содержимое макроса. Может быть он вам хочется сказать о проблеме, но из-за не настроенного вывода вы этого не видите. configASSERT очень удобный инструмент отладки FreeRTOS, и принебрегать им совершенно недопустимо.

Понятно что так оставлять нельзя....

 

Share this post


Link to post
Share on other sites
5 hours ago, x893 said:

А еще конкретнее ?

Мне вот это тоже нравится: придут, зададут вопрос. А потом начинают по капле выдавать информацию. Уже людям укажешь и конкретику, и что посмотреть, и что покрутить. Что-то заработает у них, и они исчезают, не разобравшись в вопросе.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this