单片机/MCU论坛
直播中

郑成枝

7年用户 1273经验值
私信 关注

NVIC_SystemReset()导致系统挂死怎么解决?

我用的芯片是psoc6,基于psoc creator4.4,基于CE217633这个示例,在M4 的main函数加入NVIC SystemReset(), 实现系统每隔5秒重新启动,但系统有10%的概率会挂死。添加的代码如下:
int main()
{
UART_START();
printf("resetrnrn");
Cy_SysLib_Delay(5000);
NVIC_SystemReset();
.....
}
请问 NVIC_SystemReset() 这样用不安全吗?
                                                                                                                                                                                                                                                                                                                                                                                                

回帖(1)

郭大

2024-2-1 17:06:26
在使用NVIC_SystemReset()函数时,需要确保在使用之前完成所有必要的清理工作。该函数会导致芯片进行硬件复位,重启系统,所有未完成的操作都会被中断。

如果系统在调用NVIC_SystemReset()后出现了挂死的情况,可能是由于某些未完成的操作或资源被复位导致的。你可以尝试以下方法来解决问题:

1. 确保在调用NVIC_SystemReset()之前没有未完成的关键操作。例如,在写入数据到外设之后,确保数据已经成功完成。

2. 在调用NVIC_SystemReset()之前,尝试等待一段时间,确保所有操作已经完成。可以使用Cy_SysLib_Delay()或其他延时函数来等待一段时间。

3. 检查是否有其他可能导致系统挂死的原因。例如,检查是否有意外的中断发生,或是否有其他未处理的异常情况。

4. 可以尝试重新编译和下载固件。有时,编译器可能会生成错误的代码或者固件下载不完整,导致出现问题。

5. 将NVIC_SystemReset()函数放在一个单独的线程中执行,确保没有其他操作会干扰到它。

6. 如果问题仍然存在,尝试使用其他的软件复位方式,例如使用软件复位寄存器或重新初始化系统模块。

需要注意的是,NVIC_SystemReset()函数是为了进行系统重启而设计的,使用它可能存在风险。在使用该函数时,要确保不会造成数据丢失或其他不可预测的问题。最好在控制系统重启的时机和条件,以尽量减少潜在的问题。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分