【发布时间】:2015-08-22 16:04:19
【问题描述】:
我正在使用 Simulink 和 Simulink Coder 生成任意模型的 dll。我的 C 应用程序使用 mathworks CAPI。 它运行任意模型(硬实时低于 1 毫秒)并且能够修改模型的任何参数(通过使用可调参数)。
对于simlpe 标量值,我正在获取值的地址。
伪代码:
void* simplegain = rtwCAPI_GetSignalAddrIdx()
*simplegain=42;
一切运行良好。但是,如果我想要完整的向量和矩阵的原子变化,则无法应用此方法。
对于多维数据,我使用 memcopy 将目标中的所有值写入GetSignalAddIdx() 的结果。测量表明,使用 memcopy 会变慢。
分析生成的代码显示rt_Lookup的各种调用
real_T rt_Lookup(const real_T *x, int_T xlen, real_T u, const real_T *y)
// x is the pointer the matrix The Adress of the matrix is declared in a global structure `rtDataAddrMap` statically. I can read it out, but do not know how to change.
我想要实现的是:
- 在我的应用程序中定义第二个地图(相同大小)。
- 将所有新值写入第二张地图。
- 仅更改
rtDataAddrMap中的指针以激活第二个 地图。
一般问题: 如何实现以原子方式更改多维参数? 这样做的常规方法是什么? (代码生成选项等)
具体问题:(如果我的方法是正确的) 改变矩阵的数据指针有哪些合理的解决方案?
【问题讨论】:
标签: c++ c matlab code-generation simulink