SFunction内存违规

时间:2015-10-29 15:12:03

标签: c++ matlab simulink mex s-function

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

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

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

所以,我有几个问题:

  1. 如何使用memcpy在simulink中写入数组的值?
  2. 我假设simulink输出memmory是一个连续的memmory块。这是对的吗?
  3. 有关如何解决问题的任何提示?
  4. 伪代码在这里:

    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
    }
    

0 个答案:

没有答案