我现在已经看到两个使用 dsPIC 30F4013 的情况,其中控制器由于未定义的陷阱而重置。为什么这些陷阱首先会出现仍然是一个谜,但这不是我要直接问的问题。我开始认为始终定义所有陷阱是一种很好的编程习惯,即使陷阱永远不会发生,所以我至少会收到一条明确的错误消息,而不是随机重置。这是我不知道的标准做法吗?我应该考虑这种做法的缺点吗?
是否应该始终定义所有陷阱?
电器工程
微控制器
中断
重置
固件
最佳实践
2022-01-20 23:34:03
2个回答
是的,这是个好主意——唯一的缺点是代码有点多,你必须决定如何处理陷阱(在串行端口上发出消息?打开“FAILED”灯?静默重启?等)
我的非正式规则是:
- 如果启用了中断,那么您应该有处理它的代码。
- 如果您不为中断编写代码,请禁用它。
- 如果您无法禁用它,请为其编写代码。
但是,即使没有该规则,数据表也明确回答了您的问题:
如果用户不打算在发生陷阱错误情况时采取纠正措施,则这些向量必须加载默认处理程序的地址,该处理程序仅包含 RESET 指令。另一方面,如果调用了包含无效地址的向量之一,则会生成地址错误陷阱。
(来源,第 8.3 节,第一个注释)
鉴于您无法掩盖陷阱,那么您必须处理它们。如果您不希望以特定方式处理陷阱,则适当的方法是执行RESET
指令。
其它你可能感兴趣的问题