|
楼主 |
发表于 2007-6-6 08:43
|
显示全部楼层
还好,哦瓦这里有一个程序是计算仿真设定时间,实际运行时间及其二者的比值的s函数,大家可看看,希望有用
函数用于计算仿真时间、实际运行时间、以及这两个时间的比值。这是我以前编的希望对你有用
/*****************************************************************************************************
***************function timer
***************功能说明:计算仿真时间、实际运行时间以及这两个时间的比值
***************Copyright 2004-2008
***************$Revision: 1.0 $ $Date: 2004/11/04 22:55 $ 函数版
*******************************************************************************************************/
#include <math.h>
#ifdef __cplusplus
extern "C" { // use the C fcn-call standard for all functions
#endif // defined within this scope
#define S_FUNCTION_NAME xgtimer
#define S_FUNCTION_LEVEL 2
#include "stdlib.h"
#include "stdio.h"
#include "simstruc.h"
#include "time.h"
/*====================*
* S-function methods *
*====================*/
static void mdlInitializeSizes(SimStruct *S)
{
/* See sfuntmpl_doc.c for more details on the macros below */
/***************************设置参数个数*****************************************************/
ssSetNumSFcnParams(S, 0); /* Number of expected parameters */
if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) {
/* Return if number of expected != number of actual parameters */
return;
}
/***************************设置离散以及连续状态个数********************************************/
ssSetNumContStates(S, 0);
ssSetNumDiscStates(S, 0);
/***************************设置输入端口的属性*****************************************************/
if (!ssSetNumInputPorts(S, 0)) return;
/**************************设置输出端口的属性个数**************************************************/
if (!ssSetNumOutputPorts(S, 0)) return;
/***************************设置直接反馈**************************************************/
/*
* Set direct feedthrough flag (1=yes, 0=no).
* A port has direct feedthrough if the input is used in either
* the mdlOutputs or mdlGetTimeOfNextVarHit functions.
* See matlabroot/simulink/src/sfuntmpl_directfeed.txt.
*/
/***************************设置存储特性**************************************************/
/***************************设置采样时间个数**********************************************/
ssSetNumSampleTimes(S, 1);
/***************************设置工作向量*************************************************/
ssSetNumRWork(S, 1);
ssSetNumIWork(S, 0);
ssSetNumPWork(S, 0);
ssSetNumModes(S, 0);
/***************************设置过零采样的状态个数*****************************************/
ssSetNumNonsampledZCs(S, 0);
/***************************设置s函数工作选项***********************************************/
ssSetOptions(S,
SS_OPTION_WORKS_WITH_CODE_REUSE |
SS_OPTION_EXCEPTION_FREE_CODE |
SS_OPTION_USE_TLC_WITH_ACCELERATOR|SS_OPTION_USE_TLC_WITH_ACCELERATOR);
}
/*******************************************************************************************
***********************设定采样时间*********************************************************
********************************************************************************************/
static void mdlInitializeSampleTimes(SimStruct *S)
{
ssSetSampleTime(S, 0,0.0);
ssSetOffsetTime(S, 0, 0.0);
}
#define MDL_START /* Change to #undef to remove function */
#if defined(MDL_START)
static void mdlStart(SimStruct *S)
{ time_t sstart;
sstart=clock();
real_T xsstart;
xsstart=1.000*sstart/CLK_TCK;
ssSetRWorkValue(S,0,xsstart);
}
#endif /* MDL_START */
/*******************************************************************************************
***********************输出数据计算*********************************************************
********************************************************************************************/
static void mdlOutputs(SimStruct *S, int_T tid)
{
}
/* Function: mdlTerminate =====================================================
* Abstract:
* In this function, you should perform any actions that are necessary
* at the termination of a simulation. For example, if memory was
* allocated in mdlStart, this is the place to free it.
*/
static void mdlTerminate(SimStruct *S)
{ time_t eend;
real_T xsstart=ssGetRWorkValue(S,0);
eend=clock();
real_T T0=ssGetT(S);
//printf("%f\n",T0);
printf("******************************************************************\n");
printf("仿真时间:%f s\n",T0);
printf("程序运行时间为:%fs,合%f%小时\n",1.0*(eend/CLK_TCK-xsstart),(1.0*(eend/CLK_TCK-xsstart))/3600.0);
printf("程序运行时间为时间与仿真时间之比:%f\n",(1.00000*(eend)/CLK_TCK-xsstart)/T0);
printf("************************恭喜您本次仿真结束************************\n");
}
/*======================================================*
* See sfuntmpl_doc.c for the optional S-function methods *
*======================================================*/
/*=============================*
* Required S-function trailer *
*=============================*/
#ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? */
#include "simulink.c" /* MEX-file interface mechanism */
#else
#include "cg_sfun.h" /* Code generation registration function */
#endif
#ifdef __cplusplus
} // end of extern "C" scope
#endif |
评分
-
2
查看全部评分
-
|