我正在 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 的位置写入时代码崩溃。这是我通过大量试验得出的粗略估计,因为此代码在嵌入式系统上运行,并没有真正提供错误跟踪。
提前致谢!