9,7 → 9,7 |
import org.jdom.input.SAXBuilder; |
import org.jdom.output.XMLOutputter; |
import java.util.regex.*; |
import java.util.Random; |
import java.util.random; |
|
/** |
* <p>Title: First XML filter</p> |
145,9 → 145,9 |
"," + tsk_sec.localscheduler + "," + tsk_sec.number + "," |
+ tsk_sec.group + ",{" + tsk_sec.deadline.tv_sec + |
"," + |
tsk_sec.deadline.tv_nsec + "}," + "{" + |
tsk_sec.deadline.tv_nsec * 1000 + "}," + "{" + |
tsk_sec.wcet.tv_sec + "," + |
tsk_sec.wcet.tv_nsec + "}," + tsk_sec.act_number + |
tsk_sec.wcet.tv_nsec * 1000 + "}," + tsk_sec.act_number + |
",0,act_" + tsk_sec.name + |
",exec_" + tsk_sec.name + "},\n"); |
total_task_section++; |
208,13 → 208,19 |
process_oneshot_task(e, out); |
task_type=21; |
} else if (t.getValue().equals("CyclicalTask")) { |
String[] dline=pattern.split(e.getChild("dline").getText()); |
task_type=22; |
act=process_cyclical_task(e, out); |
time.tv_sec = Long.valueOf(dline[0]).longValue(); |
time.tv_nsec = Long.valueOf(dline[1]).longValue() / 1000; |
|
|
act=process_periodic_task(e, out); |
} |
|
task_class section=new task_class(); |
section.deadline=new timespec(); |
section.wcet=new timespec(); |
section.deadline.tv_sec=time.tv_sec; |
section.deadline.tv_nsec=time.tv_nsec; |
section.name="task"+task_group; |
section.contract=task_server; |
section.group=task_group; |
223,31 → 229,16 |
section.localscheduler=localscheduler; |
section.number=Integer.valueOf(e.getChild("number").getText()).intValue(); |
|
Element dl = e.getChild("dline"); |
if (dl != null) { |
|
String[] dline=pattern.split(dl.getText()); |
time.tv_sec = Long.valueOf(dline[0]).longValue(); |
time.tv_nsec = Long.valueOf(dline[1]).longValue() * 1000; |
|
section.deadline.tv_sec=time.tv_sec; |
section.deadline.tv_nsec=time.tv_nsec; |
|
} |
|
|
Element wc = e.getChild("wcet"); |
if (wc != null) { |
|
String[] wcet=pattern.split(e.getChild("wcet").getText()); |
time.tv_sec = Long.valueOf(wcet[0]).longValue(); |
time.tv_nsec = Long.valueOf(wcet[1]).longValue() * 1000; |
|
time.tv_nsec = Long.valueOf(wcet[1]).longValue() / 1000; |
section.wcet=new timespec(); |
section.wcet.tv_sec=time.tv_sec; |
section.wcet.tv_nsec=time.tv_nsec; |
|
} |
|
|
Task_Section.add(section); |
task_group++; |
|
261,7 → 252,7 |
String[] start_time=pattern.split(act_section.getChild("start_time").getText()); |
Element exec_section=e.getChild("exec_section"); |
|
String[] exec_const=pattern.split(exec_section.getChild("exec_time").getText()); |
String[] exec_const=pattern.split(exec_section.getChild("exec_const").getText()); |
try { |
out.write("struct timespec act_task"+task_group+"[]={{"+start_time[0]+","+start_time[1]+"},};\n\n"); |
out.write("struct timespec exec_task"+task_group+"[]={{"+exec_const[0]+","+exec_const[1]+"},};\n\n"); |
279,7 → 270,7 |
String[] start_time=pattern.split(act_section.getChild("start_time").getText()); |
|
Element exec_section=e.getChild("exec_section"); |
String[] exec_const=pattern.split(exec_section.getChild("exec_time").getText()); |
String[] exec_const=pattern.split(exec_section.getChild("exec_const").getText()); |
|
try { |
out.write("struct timespec act_task"+task_group+"[]={{"+start_time[0]+","+start_time[1]+"},};\n\n"); |
303,26 → 294,26 |
long act_delta=0; |
timespec delta_act_ts = new timespec(); |
|
if (deltatime != null) { |
if (deltatime.exists()) { |
delta_time = pattern.split(deltatime.getText()); |
delta_act_ts.tv_sec = Long.valueOf(delta_time[0]).longValue(); |
delta_act_ts.tv_nsec = Long.valueOf(delta_time[1]).longValue() * 1000; |
delta_act_ts.tv_nsec = Long.valueOf(delta_time[1]).longValue() / 1000; |
act_delta = delta_act_ts.TIMESPEC2USEC(); |
} |
|
Element exec_section=e.getChild("exec_section"); |
String[] exec_const=pattern.split(exec_section.getChild("exec_time").getText()); |
Element execdelta=exec_section.getChild("delta_time"); |
String[] exec_const=pattern.split(exec_section.getChild("exec_const").getText()); |
Element execdelta=exec_section.getChild("exec_delta"); |
String[] exec_delta; |
|
long exec_delta_long = 0; |
timespec exec_delta_ts = new timespec(); |
timespec delta_act_ts = new timespec(); |
|
if (execdelta != null) { |
if (execdelta.exists()) { |
exec_delta=pattern.split(execdelta.getText()); |
exec_delta_ts.tv_sec = Long.valueOf(exec_delta[0]).longValue(); |
exec_delta_ts.tv_nsec = Long.valueOf(exec_delta[1]).longValue() * 1000; |
exec_delta_long = exec_delta_ts.TIMESPEC2USEC(); |
exec_act_ts.tv_sec = Long.valueOf(exec_delta[0]).longValue(); |
exec_act_ts.tv_nsec = Long.valueOf(exec_delta[1]).longValue() / 1000; |
exec_delta_long = exec_act_ts.TIMESPEC2USEC(); |
} |
|
try { |
331,13 → 322,13 |
|
timespec time = new timespec(); |
time.tv_sec = Long.valueOf(period[0]).longValue(); |
time.tv_nsec = Long.valueOf(period[1]).longValue() * 1000; |
time.tv_nsec = Long.valueOf(period[1]).longValue() / 1000; |
|
long usecperiod = time.TIMESPEC2USEC(); |
timespec nextact = new timespec(); |
|
time.tv_sec = Long.valueOf(start_time[0]).longValue(); |
time.tv_nsec = Long.valueOf(start_time[1]).longValue() * 1000; |
time.tv_nsec = Long.valueOf(start_time[1]).longValue() / 1000; |
|
Random rd = new Random(); |
|
344,11 → 335,9 |
while (simulation_time.TIMESPEC_A_GT_B(time)) { |
|
nextact.tv_sec = Long.valueOf(period[0]).longValue(); |
nextact.tv_nsec = Long.valueOf(period[1]).longValue() * 1000; |
nextact.tv_nsec = Long.valueOf(period[1]).longValue() / 1000; |
|
if (act_delta != 0) { |
nextact.ADDUSEC2TIMESPEC((rd.nextInt() & Integer.MAX_VALUE) % act_delta - act_delta/2); |
} |
nextact.ADDUSEC2TIMESPEC((rd.nextInt() & Integer.MAX_INT) % act_delta - act_delta/2); |
|
time.ADDUSEC2TIMESPEC(usecperiod); |
out.write(" {"+nextact.tv_sec+","+nextact.tv_nsec/1000+"},\n"); |
363,11 → 352,9 |
for (int i=0; i<activated; i++) { |
|
nextexec.tv_sec = Long.valueOf(exec_const[0]).longValue(); |
nextexec.tv_nsec = Long.valueOf(exec_const[1]).longValue() * 1000; |
nextexec.tv_nsec = Long.valueOf(exec_const[1]).longValue() / 1000; |
|
if (exec_delta_long != 0) { |
nextexec.ADDUSEC2TIMESPEC((rd.nextInt() & Integer.MAX_VALUE) % exec_delta_long - exec_delta_long/2); |
} |
nextexec.ADDUSEC2TIMESPEC((rd.nextInt() & Integer.MAX_INT) % exec_delta_long - exec_delta_long/2); |
|
out.write(" {"+nextexec.tv_sec+","+nextexec.tv_nsec/1000+"},\n"); |
|