发 帖  
原厂入驻New
申请华秋企业认证 多层板首单免费打样!
30s提交资料,10分钟通过审核(免费赔付+顺丰包邮)>>立即报名
[问答] 如何检测代码是从中断还是正常进程运行的?
124 代码 中断 单片机
分享
大家好,我想知道如何在运行时检测一段代码是从中断还是正常进程运行的。我试图从状态寄存器(CP0寄存器12)读取EXL、ERL、UM位,但是无法从中获得任何有意义的信息。我想知道我在那里做了什么错事?我的工作环境:单片机:PIC32 MZ1024ECG100MPLAB X:3.35XC32:1.42HAND1.081.01
0
2019-11-1 11:43:10   评论 分享淘帖 邀请回答

相关问题

12个回答
这是因为默认的中断处理程序序言清除了这些位。T)。
2019-11-1 11:53:01 评论

举报

那么BOOL bMBPIsWithinException(从中断调用BOOL)呢,或者检查可能调用的中断的中断标志,或者在中断中设置一个标志。
2019-11-1 12:11:45 评论

举报

同时确保从中断和主代码调用的例程是可重入的。/ Ruben
2019-11-1 12:21:12 评论

举报

谢谢你的回答。Simung123i不知道如何使用KeePiBaseType掩蔽属性…我的中断在C:中声明,在汇编中定义:我希望有一个“硬件解决方案来解决我的问题,比如在我的代码中任何时候从寄存器中读取某种位,而不是从每个中断开始和结束创建回调来改变全局变量状态(对我来说不是)。创建每个读写的关键部分。它将使我的代码难以维护第三个人(一年后我自己也包括在内)。
2019-11-1 12:37:54 评论

举报

也许你可以把中断包装器(VuART4TxCdultWrrpAppER)放在某个程序存储器块中。并检查中断寄存器中的返回地址寄存器($RA),以查看它从何处跳跃(JAL)。
2019-11-1 12:49:34 评论

举报

您好,我想您可以从状态寄存器中读取CP0位12-10IPL<2:0>:中断优先级位的IPL字段,任何与0不同的值都应该在中断处理中。参见《家庭参考手册》第2节:您可以尝试:
2019-11-1 13:08:38 评论

举报

在再次查看数据表之后,我运行了INTSTAT寄存器,它实际上应该保存有关挂起的中断的信息。每当没有中断被处理时,该寄存器保持0,否则它持有一些中断特定值。手动声明这些值应该只在单矢量模式下使用(我的MCU被设置为多矢量模式),但是在我的情况下,按照以下方式编写的函数可以正常工作。R不是,那么单/多向量模式不起作用吗?
2019-11-1 13:22:19 评论

举报

您不能使用CP0中状态寄存器的IPL位吗?Ruben
2019-11-1 13:37:46 评论

举报

从一开始我也会提出同样的建议:但我不是这些照片的专家。
2019-11-1 13:51:32 评论

举报

据我所知,CP0状态寄存器中的IPL位用于阻塞优先级低于IPL规定的中断。这意味着我不能用它们来判断内核是否正在处理中断。IPL位不能由硬件设置。我想我已经看到FreeRTOS修改了它们,以防止在执行关键部分时触发中断。如果我错了请纠正我,请参阅第8节。中断(8.3次操作):
2019-11-1 14:02:30 评论

举报

CP0中的IPL位设置在中断序幕中,以反映在重新启用中断之前当前中断的优先级,以防止较低优先级中断发生。因此,除非您自己在代码中弄乱了它们,否则它们将准确地反映优先级。当前处理中断。优先级3中断序幕
2019-11-1 14:10:31 评论

举报

隐马尔可夫模型。。。现在有了编译器方面的解释,IPL比特对我来说是有意义的。FreeRTOS在它们自己的关键部分使用它们来禁用/启用中断(portDISABLE_INTERRUPTS()),我在这个项目中使用FreeRTOS……让我想知道我是否可以可靠地使用这些IPL位?也不能可靠地使用INTSTAT寄存器——每当软件设置IPL位,并且优先级低于IPL位的中断希望被触发时,INTSTAT位由硬件设置,其细节是挂起的中断而不触发中断。我必须想一些其他的检测方法,或者跳过这个想法,看看其他的设计。
2019-11-1 14:19:27 评论

举报

只有小组成员才能发言,加入小组>>

75个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /5 下一条

快速回复 返回顶部 返回列表