You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在嵌入DML方法的C函数中获取设备指针并实现日志记录?

在DML嵌入式C函数中获取设备指针实现日志记录

核心结论

你没办法在外部C函数fib()中自动获取调用它的设备指针,必须显式将设备指针作为参数传入才能在函数内使用日志接口。

修改步骤及示例代码

以下是调整后的完整代码,解决日志需要设备指针的问题:

dml 1.2;
device simple_embedded;
parameter documentation = "Embedding C code example for"
    + " Model Builder User's Guide";
parameter desc = "example of C code";

// 修改extern声明,添加设备指针参数
extern int fib(dev, int x);

bank regs {
    register r0 size 4 @0x0000 {
        parameter allocate = false;
        parameter configuration = "none";
        method write(val) {
            // 调用fib时传入当前设备(this指向当前设备实例)
            log "info": "Fibonacci(%d) = %d.", val, fib(this, val);
        }

        method read() -> (value) {
            // Must be implemented to compile            
        }
       
    }
}

header %{
// 修改C函数声明,指定设备指针类型(simple_embedded_t由DML自动生成)
int fib(simple_embedded_t *dev, int x);
%}

footer %{
int fib(simple_embedded_t *dev, int x) {
    // 使用传入的dev指针调用日志接口
    SIM_LOG_INFO(1, dev, 0, "Generating Fibonacci for %d", x); 
    if (x < 2) return 1;
    else return fib(dev, x-1) + fib(dev, x-2);
}
%}

关键说明

  • DML中,this关键字在设备的方法(比如寄存器的write方法)里代表当前设备实例,调用外部C函数时直接传入即可。
  • DML会为你定义的simple_embedded设备自动生成对应的C类型simple_embedded_t,所以在C代码里要使用这个类型作为设备指针的类型。
  • 递归调用fib()时,也要把设备指针传递下去,保证每一层递归都能正常打日志。

内容的提问来源于stack exchange,提问作者kbrunham-intel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:50:23