Using an STM32F767ZI microcontroller with FreeRTOS
I'm using an STM32F767ZI microcontroller with FreeRTOS. I have two tasks: one receives TCP data triggered by an interrupt every 100ms, and the other handles user requests. When task-2 calls
NVIC_SystemReset
, the system hangs, typically in vPortRaiseBASEPRI
after vTaskNotifyFromISR
used by task-1.
The error message indicates a hang in vPortRaiseBASEPRI
, causing the system to become unresponsive.
Replacing the task notification with a flag in the interrupt allows the reset but is inefficient. Disabling interrupts with portDISABLE_INTERRUPTS
, suspending tasks with vTaskSuspendAll
, and entering a critical section with taskENTER_CRITICAL
didn't help. A workaround of disabling interrupts before reset works but is unsafe.
How can I reliably perform a software reset without these issues?
Here's my code guys:
How can I modify this to ensure a reliable software reset?
@Middleware & OSSolution:Jump to solution
Well, I believe you can start by modifying the system reset procedure in task-2 to ensure a safe and reliable reset. Before calling
NVIC_SystemReset
, disable all interrupts to prevent any pending ISR from causing the system to hang.
```c...5 Replies
Do you have to use NVICSystemReset? I am asking because the stm32 has inbuilt reset functionality in SCB-AIRCR register. And maybe that can avoid the pitfalls you are encountering.
I would look into that 🙏
Solution
Well, I believe you can start by modifying the system reset procedure in task-2 to ensure a safe and reliable reset. Before calling
NVIC_SystemReset
, disable all interrupts to prevent any pending ISR from causing the system to hang.
Check out this @Sterling it will help you to achieve a reliable software reset.Okayy @UC GEE , will do
@Sterling Actually, when you ensure that interrupts are disabled before the system resets, you prevent any ongoing or pending ISRs from interfering with the reset process. This approach helps avoid the issue of the system hanging in .