1

我正在 Simulink/Matlab 中编写一个 C S-Function,它为以后的应用程序填充大小为 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 的位置写入时代码崩溃。这是我通过大量试验得出的粗略估计,因为此代码在嵌入式系统上运行,并没有真正提供错误跟踪。

提前致谢!

4

0 回答 0