void Generate_RunTimeEnvironment_Header_File() { String FileName = RteFunctionsGenerator.GetRteFolder() + "\\" + Properties.Resources.RTE_RUNTIME_ENVIRONMENT_H_FILENAME; StreamWriter writer = new StreamWriter(FileName); RteFunctionsGenerator.GenerateFileTitle(writer, FileName, Properties.Resources.RTE_RUNTIME_ENVIRONMENT_FILE_DESCRIPTION); RteFunctionsGenerator.OpenGuardDefine(writer); writer.WriteLine(); RteFunctionsGenerator.AddInclude(writer, Properties.Resources.RTE_DATATYPES_H_FILENAME); RteFunctionsGenerator.AddInclude(writer, Properties.Resources.RTE_EXTERNAL_RUNNABLES_H_FILENAME); RteFunctionsGenerator.AddInclude(writer, "<stm32f4xx.h>"); writer.WriteLine(); writer.WriteLine("/* Time periods */"); writer.WriteLine(RteFunctionsGenerator.CreateDefine("SYSTICK_FREQUENCY", AutosarApplication.GetInstance().SystickFrequencyHz.ToString())); writer.WriteLine(); /* Create defines for each frequency */ List <double> frequencys = GetDifferentFrequences(); foreach (double frequency in frequencys) { String freqName = RteFunctionsGenerator.CreateFrequencyDefineName(frequency); String freqValue = ""; int freq = (int)Math.Floor((double)AutosarApplication.GetInstance().SystickFrequencyHz / frequency); freqValue = freq.ToString(); writer.WriteLine(RteFunctionsGenerator.CreateDefine(freqName, freqValue.ToString())); } writer.WriteLine(); writer.WriteLine("/*"); writer.WriteLine(" * Rte tasks "); writer.WriteLine(" */"); foreach (OsTask osTask in AutosarApplication.GetInstance().OsTasks) { String osTaskName = RteFunctionsGenerator.GenerateRteOsTaskFunctionName(osTask); writer.WriteLine("void " + osTaskName + "(void);"); } writer.WriteLine(); RteFunctionsGenerator.CloseGuardDefine(writer); writer.WriteLine(); RteFunctionsGenerator.WriteEndOfFile(writer); writer.Close(); }
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(" }"); } } }
void Generate_RunTimeEnvironment_Source_File_FREERTOS() { RteOsInterfaceGenerator osGenerator = new RteFreeRtosGenerator(); String FileName = RteFunctionsGenerator.GetRteFolder() + "\\" + Properties.Resources.RTE_RUNTIME_ENVIRONMENT_C_FILENAME; StreamWriter writer = new StreamWriter(FileName); RteFunctionsGenerator.GenerateFileTitle(writer, FileName, Properties.Resources.RTE_RUNTIME_ENVIRONMENT_FILE_DESCRIPTION); RteFunctionsGenerator.OpenGuardDefine(writer); writer.WriteLine(); RteFunctionsGenerator.AddInclude(writer, Properties.Resources.RTE_RUNTIME_ENVIRONMENT_H_FILENAME); writer.WriteLine(); writer.WriteLine("/* Scheduler variables */"); foreach (OsTask osTask in AutosarApplication.GetInstance().OsTasks) { List <double> frequences = PeriodChangeTimes(osTask); List <String> freqVariableNames = new List <string>(); for (int i = 0; i < frequences.Count; i++) { String freqName = osTask.Name + "_" + RteFunctionsGenerator.CreateFrequencyDefineName(frequences[i]) + "_" + i.ToString(); freqVariableNames.Add(freqName); String variableDeclaration = RteFunctionsGenerator.GenerateVariable(freqName, "uint32", true, 0, "0"); writer.WriteLine(variableDeclaration); } writer.WriteLine(); } /* Declare variables for scheduling */ WriteAllTasksVariables(writer, osGenerator); WriteAllExternComponentInstances(writer); /* End declare variables */ WriteAllOsTasks_FREERTOS(writer, osGenerator); WriteInitOsTasks(writer, osGenerator); writer.WriteLine(); RteFunctionsGenerator.CloseGuardDefine(writer); writer.WriteLine(); RteFunctionsGenerator.WriteEndOfFile(writer); writer.Close(); }