当你在多个中断源之间遇到问题时,存在多种可能的原因。即使你认为其他时钟不应该影响当前的行为,它们仍然可能会间接影响系统的行为。以下是一些可能的原因:
中断嵌套:STM32支持中断嵌套。这意味着当一个中断正在执行时,如果另一个优先级更高的中断被触发,那么当前的中断会被暂停,直到优先级更高的中断执行完毕。如果你的中断优先级设置不正确,这可能导致不可预测的行为。
共享资源:两个或多个中断例程可能共享某些资源,例如全局变量、外设或内存。如果在中断服务例程中没有正确管理这些共享资源,可能会发生竞态条件,导致系统崩溃。
中断执行时间:如果一个中断服务例程执行时间过长,它可能会阻止其他中断得到及时处理。这可能会导致系统不稳定或其他不可预测的行为。
外设复位或重新配置:有时,一个中断可能会复位或重新配置一个外设,从而影响其他使用该外设的中断。
堆栈使用:不同的中断可能会有不同的堆栈使用情况。如果一个中断使用了大量的堆栈,而堆栈空间有限,这可能会导致堆栈溢出,从而影响其他中断。
为了解决此问题,你可以考虑以下策略:
仔细检查每个中断服务例程,确保它们不会影响到其他中断。
使用OSD或调试工具,观察各个中断的执行时间。
仔细检查中断优先级设置,确保没有竞态条件。
如果可能,使用RTOS,它可以为你管理中断和任务的优先级。
对共享资源使用临界区或互斥锁,确保在任何时候只有一个中断可以访问共享资源。
希望这些建议能帮助你解决问题。
【 在 dismoon 的大作中提到: 】
: 但是好奇怪,我把其他时钟全部停掉之后可以跑了
: 看来的确是中断优先级的问题,但是想不明白其他时钟为什么能影响这个啊
:
--
FROM 180.111.26.*