如何从DML调用Python函数?



我想有一个具有接口和注册银行的DML设备作为我的设备的顶层,但将处理卸载到Python。是否有从DML调用Python的轻量级方法?

这篇文章我如何单元测试一个特定的DML方法?地址从Python调用到DML,但我感兴趣的是相反的。

我想我可以创建一堆自定义接口来做到这一点,但我想知道是否有更好的方法。

用Python实现设备的部分可以是有意义的,特别是对于很少调用的代码(想到用户交互),以及当面对像字符串操作这样的任务时,类c语言的缺点特别令人痛苦,或者当需要与CLI命令共享代码时。

您可以使用SIM_call_python_functionAPI从DML调用Python。该函数在传递的字符串上使用等价的eval,因此您可以通过__import__找到模块局部函数:

local attr_value_t a = SIM_make_attr_list(0);
local attr_value_t result = SIM_call_python_function(
"__import__('simics').SIM_version", &a);
log info: "%s", SIM_attr_string(result);
SIM_attr_free(&a);
SIM_attr_free(&result);

这个API确实不是很漂亮。DML 1.2的部分标准库实际上是用Python编写的,并使用内部函数VT_call_python_module_function来完成此任务。这个API更好,但我们不建议在核心Simics团队之外使用VT_函数。

这个问题更多的是关于Simics模拟器框架,而不是关于DML。考虑到Simics的工作方式,Python代码存在于一个单独的上下文中。没有明显的轻量级方法。相反,您需要将Python代码放在单独的Python类和单独的运行时对象中,并使用Simics模拟器接口来编排调用。

Python代码通常无法访问对象的状态,因此它必须是严格的"计算this并返回所有计算值"。这对于设备行为来说不是很方便,因为设备行为实际上都是关于改变对象的状态。

即使有一堆接口,仍然存在状态处理的问题。我猜你也需要一个接口。

相关内容

  • 没有找到相关文章

最新更新