zemlemer 0 30 августа, 2019 Опубликовано 30 августа, 2019 · Жалоба Добрый день. У меня произошла неудачная попытка подружиться с 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), (согласно документации эта функция имеет право вызываться из прерывания) все намертво встает. Вроде делаю все правильно. В чем может быть причина? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 55 30 августа, 2019 Опубликовано 30 августа, 2019 · Жалоба 13 minutes ago, zemlemer said: В чем может быть причина? А какая оська реально-то крутится? Запуститесь под отладчиком, посмотрите, что вызывается вместо osSemaphoreRelease. А семафор вы удачно создаёте перед тем, как его использовать? Есть какие-либо средства верификации? 16 minutes ago, zemlemer said: configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY Очень похоже, что это FreeRTOS. Тогда для того, чтобы взывать API из прерывания, имя функции должно оканчиваться на FromISR. Перед этим должна быть вызвана xSemaphroeCreateBinary, и на выходе вернуть ненулевой хэндл. Рекомендую также включить configASSERTы, и сконфигурировать аварийный вывод куда-нить, например в консоль. Вообще с отдачей семафоров из прерываний у это оси нет. Я это регулярно делаю. Ну, конечно, при соблюдении всех вышесказанных моментов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zemlemer 0 30 августа, 2019 Опубликовано 30 августа, 2019 · Жалоба 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 помогло. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 55 30 августа, 2019 Опубликовано 30 августа, 2019 · Жалоба 2 minutes ago, zemlemer said: Что интересно - комментирование configASSERT помогло Это ещё ничего не значит. Посмотрите содержимое макроса. Может быть он вам хочется сказать о проблеме, но из-за не настроенного вывода вы этого не видите. configASSERT очень удобный инструмент отладки FreeRTOS, и принебрегать им совершенно недопустимо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 32 30 августа, 2019 Опубликовано 30 августа, 2019 · Жалоба 1 hour ago, zemlemer said: все намертво встает Конкретно - где намертво встаёт ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zemlemer 0 30 августа, 2019 Опубликовано 30 августа, 2019 · Жалоба 1 hour ago, haker_fox said: Это ещё ничего не значит. Посмотрите содержимое макроса. Может быть он вам хочется сказать о проблеме, но из-за не настроенного вывода вы этого не видите. configASSERT очень удобный инструмент отладки FreeRTOS, и принебрегать им совершенно недопустимо. Понятно что так оставлять нельзя.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zemlemer 0 31 августа, 2019 Опубликовано 31 августа, 2019 · Жалоба On 8/30/2019 at 6:51 PM, x893 said: Конкретно - где намертво встаёт ? На исполнении osSemaphoreRelease Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 32 31 августа, 2019 Опубликовано 31 августа, 2019 · Жалоба А еще конкретнее ? Или тут телепаты собрались ? Хоть бы проект полностью загрузили. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 55 1 сентября, 2019 Опубликовано 1 сентября, 2019 · Жалоба 5 hours ago, x893 said: А еще конкретнее ? Мне вот это тоже нравится: придут, зададут вопрос. А потом начинают по капле выдавать информацию. Уже людям укажешь и конкретику, и что посмотреть, и что покрутить. Что-то заработает у них, и они исчезают, не разобравшись в вопросе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться