ssSetOutputPortWidth - 它分配内存吗?我们可以强迫它是连续的吗?

时间:2016-02-23 10:49:32

标签: c matlab memory simulink s-function

我正在Simulink / Matlab中编写一个C S函数,它填充了一个大小为500 kB的输出缓冲区,供以后的应用程序使用。我在mdlInitializeSizes

中完成了这项工作
ssSetOutputPortWidth(S, 0, 500000);
ssSetOutputPortDataType(S, 0, SS_UINT8);    

稍后,在mdlOutputs中,我写入缓冲区:

uint8_T  *payload     =  (uint8_T*) ssGetOutputPortSignal(S,0);
for (uint32_T i = 0; i < 500000; ++i)
{
    payload[i] = ...;
}

我的问题是:

  • 是否使用我发布的代码安全地分配了500000个字节?
  • 这些500000字节是连续的吗?我知道我可以ssSetInputPortRequiredContiguous进行输入,但我没有找到输出选项......
  • 像这样填写输出数组是否安全/合法?有没有更好的方法呢?

我问这个是因为当我尝试在大于~128k的位置写入时,代码崩溃了。这是我通过大量试验的粗略估计,因为此代码在嵌入式系统上运行,该系统并未真正提供错误跟踪。

提前致谢!

0 个答案:

没有答案