2

我正在编写一个输出布尔数组(4 个位置)的 S 函数

在 mdlOutputs 回调中写入输出时,我遇到了访问内存冲突。

此错误不是瞬时的。我的意思是:代码运行良好,直到后来崩溃并且 Matlab 给出了一个致命错误。我很确定错误出在 memcpy 操作中,因为我已经调试过,并且在我评论这行代码之后,它工作正常。此外,如果数据类型是标量,它可以 100% 正常运行。

所以,我有几个问题:

  1. 如何使用 memcpy 在 simulink 中写入数组的值?
  2. 我假设 simulink 输出内存是一个连续的内存块。这是对的吗?
  3. 关于如何解决它的任何提示?

伪代码在这里:

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
}
4

0 回答 0