void WriteCallOfOsRunnables(StreamWriter writer, OsTask osTask) { if (osTask.Runnables.Count > 0) { double lastPeriod = -1; int changeIndex = 0; bool wasBracersOpen = false; for (int runnableIndex = 0; runnableIndex < osTask.Runnables.Count; runnableIndex++) { PeriodicRunnableDefenition runnableDefenition = AutosarApplication.GetInstance().FindRunnableDefenition(osTask.Runnables[runnableIndex].DefenitionGuid); if ((runnableDefenition != null) && (osTask.PeriodMs != runnableDefenition.PeriodMs)) { /* Close previous period */ if ((lastPeriod != runnableDefenition.PeriodMs) && wasBracersOpen) { writer.WriteLine(" }"); } /* Add open bracers */ if (lastPeriod != runnableDefenition.PeriodMs) { lastPeriod = runnableDefenition.PeriodMs; String periodVariableName = osTask.Name + "_" + RteFunctionsGenerator.CreateFrequencyDefineName(runnableDefenition.PeriodMs) + "_" + changeIndex.ToString(); int ostatok = (int)(runnableDefenition.PeriodMs / osTask.PeriodMs); changeIndex++; writer.WriteLine(" if (++" + periodVariableName + " >= " + ostatok + ")"); writer.WriteLine(" {"); writer.WriteLine(" " + periodVariableName + " = 0u;"); } wasBracersOpen = true; writer.WriteLine(" " + RteFunctionsGenerator.Generate_CallOfRunnable(osTask.Runnables[runnableIndex])); } else { if (wasBracersOpen) { wasBracersOpen = false; writer.WriteLine(" }"); } lastPeriod = osTask.PeriodMs; writer.WriteLine(" " + RteFunctionsGenerator.Generate_CallOfRunnable(osTask.Runnables[runnableIndex])); } } if (wasBracersOpen) { writer.WriteLine(" }"); } } }