Jump to content

    

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

Добрый день.

 

У меня произошла неудачная попытка подружиться с 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, zemlemer said:

все намертво встает

Конкретно - где намертво встаёт ?

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
On 8/30/2019 at 6:51 PM, x893 said:

Конкретно - где намертво встаёт ?

На исполнении osSemaphoreRelease

   

 

Share this post


Link to post
Share on other sites

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

Или тут телепаты собрались ?

Хоть бы проект полностью загрузили.

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now