gusucode.com > private工具箱matlab源码程序 > private/code_chart_source_file_rtw.m
function code_chart_source_file_rtw(fileNameInfo, chart, specsIdx) % Copyright 1995-2013 The MathWorks, Inc. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% GLOBAL VARIABLES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% global gChartInfo initialize_data_information(gChartInfo.chartData, gChartInfo.chartDataNumbers, chart); chartNumber = sf('get',chart,'chart.number'); fileName = fullfile(fileNameInfo.targetDirName,fileNameInfo.chartSourceFiles{chartNumber+1}{specsIdx}); sf_echo_generating('Coder',fileName); file = fopen(fileName,'Wt'); if file<3 construct_coder_error([],sprintf('Failed to create file: %s.',fileName),1); return; end fprintf(file,'%%implements "chartSource" "C"\n'); fprintf(file,'%%function ChartConfig(block, system) void\n'); fprintf(file,' %%createrecord chartConfiguration { ...\n'); fprintf(file,' executeAtInitialization %.17g ...\n',gChartInfo.executeAtInitialization); fprintf(file,' }\n'); fprintf(file,' %%return chartConfiguration\n'); fprintf(file,'%%endfunction\n'); % Only generate the ChartDataMap function, % which is used by globalmaplib.tlc. dump_chart_data_map_with_unified_dwork(file, chart); fclose(file); try_indenting_file(fileName); function dump_chart_data_map_with_unified_dwork(file, chart) dworkInfo = sf('get', chart, 'chart.rtwInfo.dWorkVarInfo'); numDWorks = length(dworkInfo); fprintf(file,'%%function ChartDataMap(block, system) void\n'); fprintf(file,' %%createrecord ChartDataElements {\\\n'); fprintf(file,' NumChartData %.17g \\\n',numDWorks); fprintf(file,' ChartDataDefaults {\\\n'); fprintf(file,' RecordType "ChartData"\\\n'); fprintf(file,' Dimensions []\\\n'); fprintf(file,' IsTestPoint 0\\\n'); fprintf(file,' }\\\n'); for i = 1:numDWorks fprintf(file,' ChartData {\\\n'); fprintf(file,' Name "%s"\\\n',dworkInfo(i).varName); fprintf(file,' Description "%s"\\\n',dworkInfo(i).description); fprintf(file,' SFName "%s"\\\n',dworkInfo(i).objName); fprintf(file,' Path "%s"\\\n',dworkInfo(i).path); if ~isempty(dworkInfo(i).size) % Not a scalar, which is the default case dims = sprintf('%d,', dworkInfo(i).size); fprintf(file,' Dimensions [%s]\\\n',dims(1:end-1)); end if dworkInfo(i).isTestPoint fprintf(file,' IsTestPoint 1\\\n'); end fprintf(file,' }\\\n'); end fprintf(file,' }\n'); fprintf(file,' %%return ChartDataElements\n'); fprintf(file,'%%endfunction\n'); idx = sf('get', chart, 'chart.rtwInfo.dataSetVecIdxInDWork'); interpMethod = 'SS_ZOH_INTERPOLATION'; if ~isempty(sf('find', chart, '.updateMethod', 'CONTINUOUS')) % Chart has continous time interpMethod = 'SS_LINEAR_INTERPOLATION'; end if idx >= 0 fprintf(file,' \n'); fprintf(file,'%%function USLRegCode(block, system) Output\n'); fprintf(file,' %%assign simS = RTMsGet(system, "MdlRefSfcnS")\n'); fprintf(file,' %%assign blockPath = LibGetBlockPath(block)\n'); fprintf(file,' %%assign dWork = LibBlockDWorkName(block)\n'); fprintf(file,'\n'); fprintf(file,' if (!slIsRapidAcceleratorSimulating()) { \n'); fprintf(file,' %%assign mapInfo = RTMsGet(system, "DataMapInfo")\n'); logSigs = sf('LoggedSignalsIn', chart); logObj = Stateflow.Coder.TestPoints(chart, '', logSigs.data, logSigs.state, logSigs.aslStates); if logObj.nonBusTpPresent fprintf(file,' void *pSetDescr;\n'); fprintf(file,' _ssLoggerCreateDatasetDescriptWithMMI(%%<simS>,\n'); fprintf(file,' &%%<mapInfo>.mmi,\n'); fprintf(file,' 0,\n'); fprintf(file,' NULL,\n'); fprintf(file,' NULL,\n'); fprintf(file,' &pSetDescr);\n'); fprintf(file,' if (pSetDescr) {\n'); for i = 1 : logObj.numTps tpInfo = logObj.getTpInfo(i); if ~tpInfo.isBusObj tpDataInfo = tpInfo.dataTypeInfo; tpDimsInfo = tpInfo.dimsInfo; tpFixPtInfo = tpInfo.fixPtInfo; fprintf(file,' { \n'); fprintf(file,' void *pElementDescr;\n'); if (tpInfo.isFixPt || tpInfo.isEnum ) fprintf(file,' DTypeId dType = INVALID_DTYPE_ID;\n'); end fprintf(file,' int_T dimArray[] = {%s};\n',tpDimsInfo.getDimStr()); fprintf(file,' ssLoggerAddStateflowElementDescription(%%<simS>, \n'); fprintf(file,' &pSetDescr,\n'); fprintf(file,' "%s",\n',tpInfo.className); fprintf(file,' "%s",\n',tpInfo.sfRelativePath); fprintf(file,' "%%<blockPath>", \n'); fprintf(file,' "StateflowChart/%s", \n',tpInfo.sfRelativePath); fprintf(file,' NULL,\n'); fprintf(file,' &pElementDescr); \n'); if tpInfo.isFixPt fprintf(file,' dType = ssRegisterDataTypeFxpFSlopeFixExpBias(%%<simS>, \n'); fprintf(file,' %.17g,\n',tpFixPtInfo.signed); fprintf(file,' %.17g, \n',tpFixPtInfo.wordLen); fprintf(file,' (double) %.17g, \n',tpFixPtInfo.slope); fprintf(file,' %.17g, \n',tpFixPtInfo.exponent); fprintf(file,' (double) %.17g,\n',tpFixPtInfo.bias); fprintf(file,' 0);\n'); fprintf(file,' if (dType == INVALID_DTYPE_ID)\n'); fprintf(file,' return;\n'); elseif tpInfo.isEnum fprintf(file,' ssRegisterTypeFromNamedObject(%%<simS>,\n'); fprintf(file,' "%s",\n',tpDataInfo.mwTypeName); fprintf(file,' &dType);\n'); fprintf(file,' \n'); fprintf(file,' if (dType == INVALID_DTYPE_ID)\n'); fprintf(file,' return;\n'); end fprintf(file,' ssLoggerAddTimeseriesDescriptionWithInterpolation(%%<simS>,\n'); fprintf(file,' &pSetDescr,\n'); fprintf(file,' &pElementDescr,\n'); fprintf(file,' "%s",\n',tpInfo.name); fprintf(file,' %.17g,\n',tpDimsInfo.numDimsUSL); fprintf(file,' dimArray,\n'); fprintf(file,' %s, \n',tpInfo.dataTypeStr); fprintf(file,' %.17g,\n',tpDataInfo.isComplex); fprintf(file,' %s);\n',interpMethod); fprintf(file,' }\n'); end end fprintf(file,'\n'); fprintf(file,' ssLoggerCreateElementFromDescription(%%<simS>, \n'); fprintf(file,' &pSetDescr,\n'); fprintf(file,' %%<LibSFDWorkAddr(block, %.17g, "")>);\n',idx); for i = 1 : logObj.numTps tpInfo = logObj.getTpInfo(i); if ~tpInfo.isBusObj fprintf(file,' if(%%<LibSFDWork(block, %.17g, "%.17g")> != NULL) { \n',idx,i-1); fprintf(file,' mxArray *pVal = mxCreateDoubleScalar(%.17g); \n',tpInfo.ssIdNumber); fprintf(file,' ssLoggerAddElementProperty(%%<simS>,\n'); fprintf(file,' %%<LibSFDWork(block, %.17g, "%.17g")>,\n',idx,i-1); fprintf(file,' "SSIdNumber",\n'); fprintf(file,' pVal);\n'); fprintf(file,' }\n'); end end fprintf(file,' } \n'); end dump_bus_sig_logging(file, logObj, idx); fprintf(file,' } /* if (!slIsRapidAcceleratorSimulating()) */\n'); fprintf(file,'%%endfunction\n'); end function dump_bus_sig_logging(file, logObj, idx) for i=1:logObj.numTps tpInfo = logObj.getTpInfo(i); if tpInfo.isBusObj fprintf(file,' {\n'); fprintf(file,' void *pDatasetDesc;\n'); fprintf(file,' DTypeId dType = INVALID_DTYPE_ID;\n'); fprintf(file,' _ssLoggerCreateDatasetDescriptWithMMI(%%<simS>, &%%<mapInfo>.mmi, 0, NULL,\n'); fprintf(file,' NULL, &pDatasetDesc);\n'); fprintf(file,' {\n'); fprintf(file,' int_T dimensions[%.17g] = {\n',tpInfo.numDims); for idxDim=1:length(tpInfo.dimensions) if idxDim == length(tpInfo.dimensions) fprintf(file,' %s\n',tpInfo.dimensions{idxDim}); else fprintf(file,' %s ,\n',tpInfo.dimensions{idxDim}); end end fprintf(file,' };\n'); fprintf(file,' ssRegisterTypeFromNamedObject(%%<simS>,\n'); fprintf(file,' "%s", \n',tpInfo.compiledType); fprintf(file,' &dType);\n'); fprintf(file,' slSigLogAddElementDescriptionForStateflowBus(%%<simS>, &pDatasetDesc,\n'); fprintf(file,' %.17g,\n',tpInfo.heirInfoIdx); fprintf(file,' "%s",\n',tpInfo.compiledType); fprintf(file,' "%s",\n',tpInfo.name); fprintf(file,' "%%<blockPath>",\n'); fprintf(file,' %.17g,\n',tpInfo.portIdx); fprintf(file,' %.17g,\n',tpInfo.maxPoints); fprintf(file,' %.17g,\n',tpInfo.decimation); fprintf(file,' %.17g,\n',tpInfo.numDims); fprintf(file,' dimensions,\n'); fprintf(file,' SS_ZOH_INTERPOLATION,\n'); fprintf(file,' "Stateflow.SimulationData.Data", \n'); fprintf(file,' "StateflowChart/%s" );\n',tpInfo.sfRelativePath); fprintf(file,' }\n'); fprintf(file,' ssLoggerCreateElementFromDescriptionForBus(%%<simS>, &pDatasetDesc, "%s", %%<LibSFDWorkAddr(block, %.17g, "%.17g")>, NULL, 0);\n',tpInfo.compiledType,idx,i-1); fprintf(file,' }\n'); end end