矩阵和数组的代码生成

MATLAB®存储矩阵列优先格式数据和阵列(1-d,2-d,...)作为载体。金宝appSimulink的®和代码发生器可以存储在列优先或行优先格式阵列数据。对于存储在列优先布局的阵列,各列的元素是在存储器中连续。以行优先布局,行中的元素是连续的。阵列布局也被称为顺序,格式,和表示。在存储元素的顺序可以是集成性,可用性和性能非常重要。某些算法存储在一个特定的顺序数据更好执行。

编程语言和环境承担所有数据的单一阵列布局。默认情况下MATLAB和Fortran使用列为主的布局,而C和C ++使用行主要的布局。同金宝appSimulink的编码器™,您可以生成C / C ++代码,使用行主要布局或列为主布局。

阵列存储在计算机内存

在一维数组的术语计算机存储器存储数据。例如,当声明一个3×3矩阵,该软件存储该基质为具有九个元素的一维数组。默认情况下,MATLAB存储与列为主阵列布局这些元素。每列的元素在存储器中连续。

考虑矩阵一个

A = 1 2 3 4 5 6 7 8 9
一个转换为长度为9的顺序的数组:
A(1)= A(1,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;
等等。

在列优先格式中,存储器阵列的下一个元素通过递增阵列的第一索引访问。例如,这些元件对被顺序地存储在存储器中:

  • A(ⅰ)A(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)。

代码生成软件使用默认的几个原因列优先格式:

  • 信号和阵列处理的世界主要是在列为主阵列布局:MATLAB,LAPACK FORTRAN90和DSP库。

  • 列相当于基于帧的处理的信道。在这种情况下,列主要存储更加高效。

  • A柱,主要阵列是自洽的,其分量的子阵:

    • 甲列优先2- d阵列是1- d阵列的简单级联。

    • 甲列优先3- d阵列是2- d阵列的简单级联。

    • 步幅是存储器位置来索引到在同一维度中的下一个元素的数量。第一维度的步幅是一个元素。的第n维元件的步幅是较低维度的尺寸的乘积。

    • 行主正d阵列有自己的最高维度的1步幅。子矩阵的操作典型地访问存储器中的散射数据集,它不允许有效的索引。

C使用行主格式。MATLAB和Simu金宝applink默认使用的是主列格式。您可以配置代码生成软件,以生成具有行-主数组布局的代码。如果要将外部C代码与生成的代码集成,请参阅此表中列出的注意事项。

行动 考虑
该模型用于代码生成的配置阵列布局。 在配置参数对话框,集模型配置参数阵列布局列优先要么行主
启用仿真和代码生成高效的行主要算法。 选择型号配置参数使用算法行主要阵列布局优化(金宝appSIMULINK)。
在行主阵列布局与所生成的代码集成外部的C代码的功能。

创建通过使用集成了生成的代码外部代码功能S-功能:

使用C来电块调用外部C函数到Simulink。金宝app通过使用模型配置参数指定的自定义的C函数阵列布局缺省功能阵列布局(金宝appSIMULINK)。

您还可以使用coder.ceval在一个MATLAB功能块。看到接口与行主数据在MATLAB功能块(金宝appSIMULINK)。

代码生成矩阵参数

编译模型文件,模型.rtw代表矩阵作为在MATLAB语法字符向量,而不隐含存储格式。这种格式使您可以将矢量字符复制出来的.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]] *通过引用: '<根> /恒压' * / {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]] *通过引用: '<根> /恒压' * / {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0}};

内部数据存储为复数数组

金宝appSimulink和码发生器的内部数据存储从MATLAB内部数据存储仅在复数阵列的存储格式格式化不同。在MATLAB中,实部和虚部被存储在单独的阵列。在Si金宝appmulink和代码生成器,这些部件被存储在交错的格式。在存储器替代实数,虚,实数,虚等的数字。这个约定允许小信号的有效实现Simulink的线,对于金宝app复用器块和其他虚拟信号操纵块。例如,信号不积极复制他们的投入,仅仅是引用。

对于金宝app行主代码生成不支持的块

代码生成器不支持行主要阵列布局这些块生成代码。金宝app

连续

  • 衍生物

  • 积分

  • 集成有限公司

  • 积分,二阶

  • 积分,二阶有限公司

  • PID控制器

  • PID控制器(2DOF)

  • 状态空间

  • 转移FCN

  • 传输延迟

  • 可变时间延迟

  • 可变传输延迟

  • 零极

用户定义函数

  • 解释功能的MATLAB

  • Level-2的MATLAB S-功能

  • MATLAB系统

来源

  • 从电子表格

为限制行为主代码生成

  • 行主代码生成不支持可变大小的信号。金宝app

相关的话题