package test.cyclic; import javax.realtime.PeriodicParameters; import javax.realtime.PriorityParameters; import javax.realtime.RelativeTime; import javax.safetycritical.CyclicExecutive; import javax.safetycritical.CyclicSchedule; import javax.safetycritical.Frame; import javax.safetycritical.ManagedMemory; import javax.safetycritical.PeriodicEventHandler; import javax.safetycritical.StorageParameters; public class CyclicMission extends CyclicExecutive { long missionMemory = 1024; int totalPeriodicHandlers = 3; @Override protected void initialize() { // Create the handlers for the frames // peHandlerCount = totalPeriodicHandlers; for (int i = 0; i < totalPeriodicHandlers; i++) { (new EventHandler(new PriorityParameters(i + 10), new PeriodicParameters(null, new RelativeTime(10, 0)), new StorageParameters(1024, null), 256, "PEH"+i)).register(); } } public CyclicSchedule getSchedule(PeriodicEventHandler[] handlers) { Frame[] frames = new Frame[100]; for (int i = 0; i < frames.length; i++) { frames[i] = new Frame(new RelativeTime(1500, 0), new PeriodicEventHandler[] { handlers[i % totalPeriodicHandlers], handlers[(i + 1) % totalPeriodicHandlers] }); } // Frame[] frames = new Frame[3]; // frames[0] = new Frame(new RelativeTime(1500, 0), // new PeriodicEventHandler[] { handlers[0], handlers[1] }); // frames[1] = new Frame(new RelativeTime(1500, 0), // new PeriodicEventHandler[] { handlers[1], handlers[2] }); // frames[2] = new Frame(new RelativeTime(2000, 0), // new PeriodicEventHandler[] { handlers[2], handlers[0] }); return new CyclicSchedule(frames); } @Override public long missionMemorySize() { return missionMemory; } @Override public void cleanUp(){ ImmortalEntry.dumpLog.selector = 0; for(int i =0; i < ImmortalEntry.eventsLogged; i++){ ImmortalEntry.dumpLog.logEntry = i; ManagedMemory.enterPrivateMemory(1500, ImmortalEntry.dumpLog); } ImmortalEntry.dumpLog.selector = 1; for(int i =0; i < ImmortalEntry.eventsLogged-1; i++){ ImmortalEntry.dumpLog.logEntry = i; ManagedMemory.enterPrivateMemory(1500, ImmortalEntry.dumpLog); } ImmortalEntry.dumpLog.selector = 2; for(int i =0; i < ImmortalEntry.eventsLogged-1; i++){ ImmortalEntry.dumpLog.logEntry = i; ManagedMemory.enterPrivateMemory(1500, ImmortalEntry.dumpLog); } super.cleanUp(); } }