我正在编写一个输出布尔数组(4 个位置)的 S 函数
在 mdlOutputs 回调中写入输出时,我遇到了访问内存冲突。
此错误不是瞬时的。我的意思是:代码运行良好,直到后来崩溃并且 Matlab 给出了一个致命错误。我很确定错误出在 memcpy 操作中,因为我已经调试过,并且在我评论这行代码之后,它工作正常。此外,如果数据类型是标量,它可以 100% 正常运行。
所以,我有几个问题:
- 如何使用 memcpy 在 simulink 中写入数组的值?
- 我假设 simulink 输出内存是一个连续的内存块。这是对的吗?
- 关于如何解决它的任何提示?
伪代码在这里:
static void mdlOutputs ( SimStruct* S, int_T tid ) {
(...)
//src variable defined here
(...)
void* dst;
// get output port data type id
type = ssGetOutputPortDataType ( S, i ); // type = SS_BOOLEAN
// get data type size
size = ssGetDataTypeSize ( S, type ); //size = 1 byte
// get output port signal pointer
dst = ( void* ) ssGetOutputPortSignal ( S, i ); //dst has a valid value
// get output port width
width = ssGetOutputPortWidth ( S, i ); //width is 4, since it is a 4 position array
size = size * width; // size now is 4
memcpy ( dst, src, size ); // Error
}