diff --git a/srp_analysis/example/output1.txt b/srp_analysis/example/output1.txt index 37e15d9ba65080998f74f1072716d76b52810ab9..14909e63d2860941ca08af433a5d50dcb7d2ed55 100644 --- a/srp_analysis/example/output1.txt +++ b/srp_analysis/example/output1.txt @@ -1,7 +1,8 @@ Overview + Schedulable: No Total Util: 0.85 Tasks: T1 T2 T3 - Priority: P(R1) = 2 P(T2) = 2 P(T1) = 1 P(R2) = 3 P(T3) = 3 + Priority: P(R1) = 2 P(T1) = 1 P(T2) = 2 P(R2) = 3 P(T3) = 3 Task Resources: T2:( R1 R2 ) T3:( R2 ) Analysis of T1 diff --git a/srp_analysis/src/formater.rs b/srp_analysis/src/formater.rs index a88491d6b6be0f33cd54d9d5b089a3108519a7cc..06468ebdbf4716a75cba539b273535d52e136580 100644 --- a/srp_analysis/src/formater.rs +++ b/srp_analysis/src/formater.rs @@ -6,7 +6,7 @@ use super::srp_analyser::*; * Creates a readable representation of the analysis and the given information. */ pub fn format_analysis(analysis: &Vec<AnalysedTask>, tasks: &Tasks, ip: &IdPrio, tr: &TaskResources) -> String { - let overview = format_overview(tasks, ip, tr); + let overview = format_overview(tasks, ip, tr, analysis); let mut body = String::new(); for at in analysis { @@ -26,7 +26,7 @@ pub fn format_analysis(analysis: &Vec<AnalysedTask>, tasks: &Tasks, ip: &IdPrio, /* * Creates the overview section of the readable representation. */ -pub fn format_overview(tasks: &Tasks, ip: &IdPrio, tr: &TaskResources) -> String { +pub fn format_overview(tasks: &Tasks, ip: &IdPrio, tr: &TaskResources, atasks: &Vec<AnalysedTask>) -> String { // Formats the names of all the tasks. fn format_task_names(tasks: &Tasks) -> String { let mut task_names = "Tasks:".to_string(); @@ -60,13 +60,18 @@ pub fn format_overview(tasks: &Tasks, ip: &IdPrio, tr: &TaskResources) -> String } return task_res; } + let ltot = total_load_factor(tasks); - let tot_util = format!("Total Util: {}", total_load_factor(tasks)); + let schedulable = format!("Schedulable: {}", match schedulable(ltot, atasks) { + true => "Yes", + false => "No", + }); + let tot_util = format!("Total Util: {}", ltot); let task_names = format_task_names(tasks); let id_prio = format_id_prio(ip); let task_res = format_task_res(tr); - return format!("Overview\n\t{}\n\t{}\n\t{}\n\t{}", tot_util, task_names, id_prio, task_res); + return format!("Overview\n\t{}\n\t{}\n\t{}\n\t{}\n\t{}", schedulable, tot_util, task_names, id_prio, task_res); } diff --git a/srp_analysis/src/srp_analyser.rs b/srp_analysis/src/srp_analyser.rs index 3251f6d87c98694131bfb6d5f27b4313061c5414..440daf5f8b85849f767849f150bbe7f288e0790d 100644 --- a/srp_analysis/src/srp_analyser.rs +++ b/srp_analysis/src/srp_analyser.rs @@ -175,6 +175,23 @@ pub fn interference_time(task: &Task, tasks: &Tasks, ip: &IdPrio, tr: &TaskResou } +/* + * Calculate if it is schedulable. + */ +pub fn schedulable(ltot: f32, atasks: &Vec<AnalysedTask>) -> bool { + if ltot >= 1.0 { + return false; + } + + for at in atasks { + if at.response_time >= at.task.deadline { + return false; + } + } + return true; +} + + /* * Analyse tasks. *