主要内容

为包含MATLAB功能块的模型生成行主要代码

编程语言和环境假设所有数据的单数组布局。马铃薯®默认情况下,Fortran使用列主要布局,而C和C ++使用行主要布局。和万博1manbetx®编码器™,您可以生成使用行主要布局或列主要布局的C / C ++代码。

要了解有关行主要代码生成的更多信息,请参阅代码生成矩阵和数组

Matlab功能块使您可以使用MATLAB语言定义Simulink模型中的自定义功能。万博1manbetx您可以为包含的模型生成行主要代码Matlab功能通过使用行 - 主要或列主要数据来阻止。有关的更多信息Matlab功能块,看使用块实现MATLAB函数

默认情况下,代码生成器生成列主要代码。对于C / C ++代码生成,您可以通过使用模型级别的数组布局数组布局模型配置参数。将此参数设置为划艇启用行主要代码生成模型。启用Matlab功能块在模型中为行主要代码生成,使用编码器.Rowmajor.函数在块内的函数级别。

行主要代码

对于某些算法,行主要布局提供更有效的内存访问。当您为使用行主要数组布局的模型生成代码时,可以获得有效的代码,并且该模型包含一个Matlab功能块使用行主要数据的算法。

  1. 考虑一个示例模型ex_row_major_mlfb.

    此模型包含一个常量块,具有一个[5 4]矩阵。指定矩阵,设置恒定价值至:

    重塑(1:20,5,4)
    Inport块还指定一个[5 4]矩阵。要指定矩阵,请设置端口尺寸[5 4]

  2. 在“配置参数”对话框中,设置数组布局划艇

  3. 写一个名为矩阵的函数AddMatrix.。这Matlab功能块从模型配置参数继承数组布局设置数组布局除非另有说明。

    可选地,您可以使用编码器.Rowmajor.显式设置数组布局Matlab功能块到划船主要布局。

    功能s = addmatrix(a,b)s = zeros(大小(a));为了行= 1:尺寸(a,1)为了col = 1:大小(a,2)s(行,col)= a(行,col)+ b(行,col);结尾结尾

  4. 为模型生成代码。来自C代码选项卡,单击建造

代码生成器会产生此C代码:

for(b_row = 0; b_row <5; b_row ++){for(b_col = 0; b_col <4; b_col ++){rtb_s_tmp =(b_row << 2)+ b_col;RTB_S [rtb_s_tmp] = ex_row_major_mlfb_p.constant_value [rtb_s_tmp] + ex_row_major_mlfb_u.inport1 [RTB_S_TMP];}}
生成的代码有两个为了循环。首先为了循环访问行和第二行为了循环访问列。当数组布局时Matlab功能块和模型是相同的,所生成的代码是有效的,因为不需要截面或转换。

混合大多数代码生成

当您有一个在行主要数据和a上运行的模型时,您可以生成混合大多数代码Matlab功能在列主要数据上运行的块。生成使用列主要布局的模型的代码时,该模型包含使用行主要布局的MATLAB功能块,则代码生成器将块输入数据转换为行 - 主要,块输出数据返回列根据需要--MAJOR数据。当您有一个在列主要数据和a上运行的模型时,您也可以生成混合的多数代码Matlab功能在行主要数据上运行的块。

数组布局转换可能会影响性能。

  1. 考虑示例模型ex_row_major_mlfb.。有关示例模型的更多信息,请参阅行主要代码

    在“配置参数”对话框中,设置数组布局划艇

  2. 更新AddMatrix.功能在Matlab功能通过使用块的列主要数据编码器.Columnmejor.功能。

    功能s = addmatrix(a,b)编码器.Columnmejor;s =零(大小(a));为了行= 1:尺寸(a,1)为了col = 1:大小(a,2)s(行,col)= a(行,col)+ b(行,col);结尾结尾
    您可以通过使用使用混合 - 多数代码Matlab功能堵塞。在这种情况下,您可以为行主要数组布局和配置模型配置Matlab功能块用于列主要数组布局。

  3. 为模型生成代码。来自C代码选项卡,单击建造

代码生成器会产生此C代码:

for(b_row = 0; b_row <4; b_row ++){for(b_col = 0; b_col <5; b_col ++){b_tmp =(b_col << 2)+ b_row;b_tmp_0 = b_col + 5 * b_row;b [b_tmp_0] = ex_row_major_mlfb_19b_u.inport1 [b_tmp];a [b_tmp_0] = ex_row_major_mlfb_19b_p.constant_value [b_tmp];for(b_row = 0; b_row <5; b_row ++){/ * outport:' / outport'* / for(b_col = 0; b_col <4; b_col ++){b_tmp = 5 * b_col + b_row;ex_row_major_mlfb_19b_y.outport [b_col +(b_row << 2)] = a [b_tmp] + b [b_tmp];}
输入的输入Matlab功能块存在于行主要环境中。代码生成器在馈送到的输入之前对输入执行转换操作Matlab功能块,因为块是列主要布局。在处理算法后Matlab功能块,代码生成器在将数据传递到一个时将数据转换回行主要数据外港

相关话题