]> rtime.felk.cvut.cz Git - ert_linux.git/blobdiff - ert_linux/ert_linux_multitasking_main.tlc
External mode works now
[ert_linux.git] / ert_linux / ert_linux_multitasking_main.tlc
index 7ae8a20587a1688b239bd97c38a9c93d246c0159..aa40ed1d8f32678d27cef2ea4bad0e33112d620a 100644 (file)
 \r
 %endfunction\r
 \r
+%function printfunc() Output\r
+  /% printf("%s\n", __func__); %/\r
+%endfunction\r
+\r
 %function generateRtOneStep() Output\r
   %foreach j = numSampleTimes - 1\r
     %assign i = j + 1\r
     {\r
       while(!simulationFinished) {\r
        sem_wait(&sub_rate[%<i>].sem);    /* sem_val = 1 */\r
-       printf("%s\n", __func__);\r
+       %<printfunc()>\r
        %<modelName>_step%<i>();\r
-       %if extMode == 1\r
-          rtExtModeUpload(%<i>, %<RTMGetTaskTimeForTID(i)>);\r
-       %endif\r
        sem_wait(&sub_rate[%<i>].sem);    /* sem_val = 0 */\r
       }\r
     }\r
     int_T i;\r
 \r
     %if extMode == 1\r
-      /* External mode */\r
-      rtSetTFinalForExtMode(&rtmGetTFinal(RT_MDL));\r
-      rtExtModeCheckInit(NUMST);\r
-      rtExtModeWaitForStartPkt(rtmGetRTWExtModeInfo(RT_MDL), NUMST, (boolean_T *)&rtmGetStopRequested(RT_MDL));\r
+      %<SLibGenERTExtModeInit()>\r
     %endif\r
 \r
-    (void)printf("\n** starting the model **\n");\r
-\r
     clock_gettime(CLOCK_MONOTONIC, &next);\r
 \r
     /* Main loop, running until all the threads are terminated */\r
     while(rtmGetErrorStatus(%<modelName>_M) == NULL && !rtmGetStopRequested(%<modelName>_M)) {\r
-      printf("%s\n", __func__);\r
+      %<printfunc()>\r
       /* Check subrate overrun, set rates that need to run this time step*/\r
       %<LibCallSetEventForThisBaseStep("eventFlags")>\\r
 \r
+      /* Trigger sub-rate threads */\r
       %foreach i = numSampleTimes\r
        %if i == 0 || i == 1 && tid01Eq\r
          %continue\r
        }\r
       %endforeach\r
 \r
-      %if extMode == 1\r
-        /* external mode */\r
-       rtExtModeUpload(0, %<RTMGetTaskTimeForTID(0)>);\r
-       %if tid01Eq\r
-         rtExtModeUpload(1, %<RTMGetTaskTimeForTID(1)>);\r
-       %endif\r
+      /* Execute base rate step */\r
+      %<modelName>_step0();\r
 \r
+      %if extMode == 1\r
        rtExtModeCheckEndTrigger();\r
-        rtExtModePauseIfNeeded(rtmGetRTWExtModeInfo(RT_MDL),\r
-                               NUMST,\r
-                               (boolean_T *)&rtmGetStopRequested(RT_MDL));\r
         rtExtModeOneStep(rtmGetRTWExtModeInfo(RT_MDL),\r
                          NUMST,\r
                          (boolean_T *)&rtmGetStopRequested(RT_MDL));\r
       if (now.tv_sec > next.tv_sec ||\r
           (now.tv_sec == next.tv_sec && now.tv_nsec > next.tv_nsec)) {\r
            uint64_T nsec = (now.tv_sec - next.tv_sec) * 1000000000 + now.tv_nsec - next.tv_nsec;\r
-           fprintf(stderr, "Base rate (%<s>s) overrun by %d us\n", (int)(nsec/1000));\r
+           fprintf(stderr, "Base rate (%<fundamentalStepSize>s) overrun by %d us\n", (int)(nsec/1000));\r
       }\r
       clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &next, NULL);\r
 \r
       pthread_join(sub_rate[%<i>].thread, NULL);\r
     %endforeach\r
 \r
+    %if extMode == 1\r
+      rtExtModeShutdown(%<numSampleTimes>);\r
+    %endif\r
+\r
     /* Terminate model */\r
     %<modelName>_terminate();\r
 \r