MATLAB®将矩阵数据和数组(1-D, 2-D,…)以列主格式存储为向量。金宝app动态仿真模块®代码生成器可以以列主格式或行主格式存储数组数据。对于以列主布局存储的数组,列的元素在内存中是连续的。在行主布局中,行中的元素是连续的。数组布局也被称为顺序、格式和表示。元素的存储顺序对于集成、可用性和性能都很重要。某些算法在以特定顺序存储的数据上表现得更好。
编程语言和环境假定所有数据都采用单一数组布局。MATLAB和Fortran默认使用列主布局,而C和c++使用行主布局。与金宝app仿真软件编码器™,您可以生成使用行主布局或列主布局的C/ c++代码。
计算机存储器以一维数组的形式存储数据。例如,当您声明一个3 × 3矩阵时,软件将这个矩阵存储为一个包含9个元素的一维数组。默认情况下,MATLAB使用列主数组布局存储这些元素。每个列的元素在内存中是连续的。
考虑到矩阵一个
:
A = 1 2 3 4 5 6 7 8 9
一个
转换为长度为9的数组,顺序如下:A(1) = A(1,1);A(2) = A(2,1) = 4;A(3) = A(3,1) = 7;A(4) = A(1,2) = 2;A(5) = A(2,2) = 5;
在列主格式中,通过对数组的第一个索引加1来访问内存中数组的下一个元素。例如,这些元素对按顺序存储在内存中:
(我)
和(i + 1)
B (i, j)
和B (i + 1, j)
C (i, j, k)
和C (i + 1 j k)
矩阵一个
默认情况下在内存中表示为:
1 4 7 2 5 8 3 6 9
在行主数组布局中,编程语言将行元素连续存储在内存中。在行主布局中,数组的元素存储为:
1 2 3 4 5 6 7 8 9
您可以以列主或行主布局存储n维数组。在列主布局中,第一个维度(最左边)或索引中的元素在内存中是连续的。在行主布局中,来自最后一个(最右边)维度或索引的元素是连续的。
有关MATLAB数据的内部表示的更多信息,请参见MATLAB数据.
代码生成软件默认使用列-主格式,原因如下:
信号和阵列处理的世界主要是列主阵列布局:MATLAB, LAPack, Fortran90和DSP库。
在基于帧的处理中,列等价于信道。在这种情况下,列主存储更有效。
列主数组与它的子矩阵组件是自一致的:
列主二维数组是一维数组的简单串联。
列主三维阵列是二维阵列的简单串联。
步幅是在同一维度中索引下一个元素的内存位置数。第一个维度的步幅是一个元素。第n维元素的步幅是较低维度尺寸的乘积。
行主n-D数组的最大维度步幅为1。子矩阵操作通常是访问内存中分散的数据集,这不允许高效的索引。
C语言使用行主格式。MATLAB和Simu金宝applink默认使用column-major格式。您可以配置代码生成软件以生成具有行主数组布局的代码。如果要将外部C代码与生成的代码集成,请参阅该表中列出的注意事项。
行动 | 考虑 |
---|---|
为代码生成配置模型的数组布局。 | 在“配置参数”对话框中,设置模型配置参数阵列布局来列为主 或行 . |
为模拟和代码生成启用有效的行主算法。 | 选择模型配置参数使用优化的行主阵列布局算法. |
在行主数组布局中与生成的代码集成外部C代码函数。 | 使用如下方法创建将外部代码函数与生成代码集成在一起的s -函数:
使用C Caller块在Simulink中调用外部C函数。金宝app使用模型配置参数指定自定义C函数的数组布局默认函数数组布局. 你也可以用 |
编译后的模型文件,
,将矩阵表示为MATLAB语法中的字符向量,没有隐含的存储格式。这种格式使您能够将字符向量从模型
.rtw.rtw
文件,粘贴到MATLAB文件,并让MATLAB识别它。
例如,3 × 3矩阵常数块
1 2 3 4 5 6 7 8 9
模型
.rtw
作为参数{标识符“Constant_Value LogicalSrc P0保护没有价值(1.0,4.0,7.0,2.0,5.0,8.0,3.0,6.0,9.0]CGTypeIdx 18 ContainerCGTypeIdx 19 ReferencedBy矩阵(1、4)[[0 1 0,0];]GraphicalRef矩阵(1、2)[[0,1];]BHMPrmIdx 0 GraphicalSource [0, 1] OwnerSysIdx [0, 1] VarGroupIdx (1,0) WasAccessedAsVariable 1}
的
文件声明矩阵参数的实际存储空间。您可以看到格式是列主布局。模型
_data.c
参数模型_P ={/*表达式:[[1,2,3];(4、5、6);[7 8 9]]*引用:“< Root > /常数”* / {1.0,4.0,7.0,2.0,5.0,8.0,3.0,6.0,9.0}};
例如,3 × 3矩阵常数块
1 2 3 4 5 6 7 8 9
模型
.rtw
作为参数{标识符“Constant_Value LogicalSrc P0保护没有价值(1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0]CGTypeIdx 18 ContainerCGTypeIdx 19 ReferencedBy矩阵(1、4)[[0 1 0,0];]GraphicalRef矩阵(1、2)[[0,1];]BHMPrmIdx 0 GraphicalSource [0, 1] OwnerSysIdx [0, 1] VarGroupIdx (1,0) WasAccessedAsVariable 1}
的
文件声明矩阵参数的实际存储空间。可以看到格式是行主格式。模型
_data.h
参数模型_P ={/*表达式:[[1,2,3];(4、5、6);[7 8 9]]*引用:“< Root > /常数”* / {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0}};
金宝appSimulink和代码生成器内部数据存储格式与MATLAB内部数据存储格式的区别仅在于复数数组的存储。在MATLAB中,实部和虚部存储在单独的数组中。在Si金宝appmulink和代码生成器中,部件以交错格式存储。内存中的数字交替出现实数、虚数、实数、虚数等等。这种约定允许在Simulink线路上有效地实现小信号,用于金宝appMux块和其他虚拟信号处理块。例如,信号不会主动复制它们的输入,而只是复制引用。
代码生成器不支持在行主数组布局中生成代码的这些块。金宝app
导数
积分器
积分器有限
积分器,二阶
积分器,二阶有限
PID控制器
PID控制器(2自由度)
状态方程
转移Fcn
运输延迟
变量的时间延迟
变量传输延迟
Zero-Pole
ASCII字符串
组成字符串
扫描字符串
字符串比较
字符串连接
字符串常量
字符串包含
字符串数
字符串中找到
字符串长度
ASCII字符串
字符串双
字符串枚举
字符串单
子字符串
字符串
解释MATLAB函数
2级MATLAB函数
从电子表格
集成电路
行主代码生成不支持可变大小的信号。金宝app