This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我在 DCL 用户指南中看到了有关在参数更新期间禁用中断的以下句子、想进一步了解这一点。
"第一个这样的子结构包含一个影子参数集(SPS)、用户在执行参数更新序列之前加载该参数集。 更新序列将 SPS 参数安全复制到主控制器结构中 通过禁用中断 然后重新启用它们。 这可确保控制器绝不会使用部分更新的参数集运行、并允许更新控制器参数而不干扰控制循环。"
1) 1)哪个函数会禁用中断、它在软件中写入的位置? 您能向我显示相关线路吗?
2) 2)这种禁用特性是否会禁用所有中断或其中的一部分? 您能提供更多信息吗?
3) 3)我的中断被禁用多少个系统周期?
4) 4)我将在系统测试上调整 PID、因此、我需要在参数更新期间继续设置中断。 我可以禁用此功能吗?
提前感谢。
尊敬的 Gokhan:
此处的答案与您的 Q 格式相同。
1)只有函数以 DCL_updateXXX 开头可通过调用 DCL_disable_ints 来禁用中断、您可以搜索 DCLF32.h 中出现的所有 DCL_disable_ints。
2) 2)除了定期更新例程之外、我们还根据 DCL_fupdateXXX 提供了"强制"更新例程、该例程不会禁用中断。 确保在项目根目录中包含.asm 文件、因为它是作为外部汇编模块实现的。
3)它取决于您所使用的控制器的类型,因为 参数大小不同。 所有 float32_t 属性分配都是原子性的、因此禁用的时钟周期时间将是控制器的 SPS 结构中属性的数量。 (例如、DCL_PI 将为6、DCL_PID 将花费8个周期)
4) 4)是的、当然可以、您也可以使用 DCL_fupdateXXX、以便它不会禁用中断。 但是、如果您希望让 ISR 不断检查是否需要通过信标更新控制器(由 DCL_request_update (ptr)设置 )、您可以进入 DCL_updateXXX 实现并手动删除与 DCL_disable_ints 和 DCL_restore_ints 相关的行。
如果您需要进一步说明、请告诉我。 希望这对您有所帮助!
此致!
王森