/* Function: rtOneStep ======================================================== * * Abstract: * Perform one step of the model. */ static void rt_OneStep(RT_MODEL *S) { real_T tnext; /*********************************************** * Check and see if error status has been set * ***********************************************/ if (rtmGetErrorStatus(S) != NULL) { GBLbuf.stopExecutionFlag = 1; return; } /* enable interrupts here */ tnext = rt_SimGetNextSampleHit(); rtsiSetSolverStopTime(rtmGetRTWSolverInfo(S),tnext); outputs(S, 0); rtExtModeSingleTaskUpload(S); update(S, 0); rt_SimUpdateDiscreteTaskSampleHits(rtmGetNumSampleTimes(S), rtmGetTimingData(S), rtmGetSampleHitPtr(S), rtmGetTPtr(S)); if (rtmGetSampleTime(S,0) == CONTINUOUS_SAMPLE_TIME) { rt_UpdateContinuousStates(S); } rtExtModeCheckEndTrigger(); } /* end rtOneStep */
/** * This function is called periodically (as specified by the control frequency). * The useful functions that you can call used in doloop() are listed below. * * frequency() returns frequency of simulation. * period() returns period of simulation. * duration() returns duration of simulation. * simTicks() returns elapsed simulation ticks. * simTimeInNano() returns elapsed simulation time in nano seconds. * simTimeInMiliSec() returns elapsed simulation time in miliseconds. * simTimeInSec() returns elapsed simulation time in seconds. * overruns() returns the count of overruns. * * @return If you return 0, the control will continue to execute. If you return * nonzero, the control will abort and stop() function will be called. */ int ZenomMatlab::doloop() { tnext = rt_SimGetNextSampleHit(); rtsiSetSolverStopTime(rtmGetRTWSolverInfo(rtM),tnext); OUTPUTS(rtM, 0); //rtExtModeSingleTaskUpload(rtM); UPDATED(rtM, 0); rt_SimUpdateDiscreteTaskSampleHits(rtmGetNumSampleTimes(rtM), rtmGetTimingData(rtM), rtmGetSampleHitPtr(rtM), rtmGetTPtr(rtM)); if (rtmGetSampleTime(rtM, 0) == CONTINUOUS_SAMPLE_TIME) { rt_UpdateContinuousStates(rtM); } mmi = &(rtmGetDataMapInfo(rtM).mmi); Xrt_SetParameterInfo(mmi); return 0; }
/* Function: rtOneStep ======================================================== * * Abstract: * Perform one step of the model. This function is modeled such that * it could be called from an interrupt service routine (ISR) with minor * modifications. */ static void rt_OneStep(RT_MODEL *S) { real_T tnext; /*********************************************** * Check and see if base step time is too fast * ***********************************************/ if (GBLbuf.isrOverrun++) { GBLbuf.stopExecutionFlag = 1; return; } /*********************************************** * Check and see if error status has been set * ***********************************************/ if (rtmGetErrorStatus(S) != NULL) { GBLbuf.stopExecutionFlag = 1; return; } /* enable interrupts here */ /* * In a multi-tasking environment, this would be removed from the base rate * and called as a "background" task. */ rtExtModeOneStep(rtmGetRTWExtModeInfo(S), rtmGetNumSampleTimes(S), (boolean_T *)&rtmGetStopRequested(S)); tnext = rt_SimGetNextSampleHit(); rtsiSetSolverStopTime(rtmGetRTWSolverInfo(S),tnext); MdlOutputs(0); rtExtModeSingleTaskUpload(S); /*GBLbuf.errmsg = rt_UpdateTXYLogVars(rtmGetRTWLogInfo(S), rtmGetTPtr(S)); if (GBLbuf.errmsg != NULL) { GBLbuf.stopExecutionFlag = 1; return; }*//*removed logging*/ /*rt_UpdateSigLogVars(rtmGetRTWLogInfo(S), rtmGetTPtr(S));*//*removed logging*/ MdlUpdate(0); rt_SimUpdateDiscreteTaskSampleHits(rtmGetNumSampleTimes(S), rtmGetTimingData(S), rtmGetSampleHitPtr(S), rtmGetTPtr(S)); if (rtmGetSampleTime(S,0) == CONTINUOUS_SAMPLE_TIME) { rt_UpdateContinuousStates(S); } GBLbuf.isrOverrun--; rtExtModeCheckEndTrigger(); } /* end rtOneStep */