主要内容

减少生成代码中总线分配块的数据副本

对于包含总线分配块,如果可能的话,代码生成器对块的输入和输出使用相同的变量。重用这些变量可以减少数据拷贝、节省RAM消耗并提高代码执行速度。

示例模型

例如,在bus_assignoptim,包含六个元素的总线信号馈送到总线分配Block和a总线选择器块。的总线分配Block将新值赋给总线元素a1_real_array.这个公共汽车信号传入着干活

生成没有优化的代码

属性生成未进行优化的代码执行分配和总线分配块的就地更新参数.如果没有优化bus_assignoptim_step函数包含以下代码:

void bus_assignoptim_step(void) {real_T rtb_assign [36];int32_T我;/*分配:'<根>/分配'合并:*输入:'<根>/In1' *输入:'<根>/In2' *产品:'<根>/产品' *选择器:'<根>/选择器' * Sum: '<根>/Sum1' */ for (i = 0;I < 36;i++) {rtb_Assignment[i] = bus_assignoptim_U.In1.a1_real_array[i];} for (i = 0;I < 2;i++) {rtb_Assignment[(int32_T)(i + 22)] = (bus_assignoptim_U.In1.)a1_real_array[(int32_T)(i + 22)] + bus_assignoptim_U.In1.a1_num) * bus_assignoptim_U.In2; } /* End of Assignment: '/Assignment' */ /* Outport: '/Out' incorporates: * BusAssignment: '/Bus Assignment' * Inport: '/In1' */ bus_assignoptim_Y.Out = bus_assignoptim_U.In1; /* BusAssignment: '/Bus Assignment' incorporates: * Outport: '/Out' */ for (i = 0; i < 36; i++) { bus_assignoptim_Y.Out.a1_real_array[i] = rtb_Assignment[i]; } }
生成的代码包含临时数组rtb_Assignment用于在此数据被分配给之前保存数据bus_assignoptim_Y.Out.a1_real_array

使用优化生成代码

属性生成带有优化的代码执行分配和总线分配块的就地更新参数.通过优化,得到bus_assignoptim_step函数包含以下代码:

/*模型步长函数*/ void bus_assignoptim_step(void) {int32_T i;/*输出:'<根>/Out'合并:*输入:'<根>/In1' * SignalConversion: '<根>/TmpBusAssignmentBufferAtBus AssignmentInport1' */ bus_assignoptim_YOut = bus_assignoptim_U.In1;/*分配:“<根>/分配”包含:*输入:“<根>/In1”*输入:“<根>/In2”*输出:“<根>/Out”*产品:“<根>/产品”*选择器:“<根>/选择器”* Sum:“<根>/Sum1”*/ for (i = 0;I < 36;i++) {bus_assignoptim_Y.Out。a1_real_array[i] = bus_assignoptim_U.In1.a1_real_array[i]; } for (i = 0; i < 2; i++) { bus_assignoptim_Y.Out.a1_real_array[(int32_T)(i + 22)] = (bus_assignoptim_U.In1.a1_real_array[(int32_T)(i + 22)] + bus_assignoptim_U.In1.a1_num) * bus_assignoptim_U.In2; } /* End of Assignment: '/Assignment' */ }
生成的代码不包含临时数组rtb_Assignment1用于保存数据。生成的代码直接将此数据分配给bus_assignoptim_Y.Out.a1_real_array

另请参阅

相关的话题