1use crate::prelude::*;
9
10pub mod prelude {
11 pub use super::{
12 RTTask,
13 };
14}
15
16#[derive(Debug, Clone)]
17#[derive(serde::Serialize, serde::Deserialize)]
18pub struct RTTask {
19 pub wcet: Time,
21 pub deadline: Time,
23 pub period: Time,
25}
26
27impl RTTask {
28 pub fn new_ns(wcet: u64, deadline: u64, period: u64) -> Self {
29 Self {
30 wcet: Time::nanos(wcet as f64),
31 deadline: Time::nanos(deadline as f64),
32 period: Time::nanos(period as f64),
33 }
34 }
35
36 pub fn utilization(&self) -> f64 {
38 self.wcet.value_ns / self.period.value_ns
39 }
40
41 pub fn density(&self) -> f64 {
43 self.wcet.value_ns / self.deadline.value_ns
44 }
45
46 pub fn laxity(&self) -> Time {
48 self.deadline - self.wcet
49 }
50
51 pub fn has_implicit_deadline(&self) -> bool {
53 self.deadline == self.period
54 }
55
56 pub fn has_constrained_deadline(&self) -> bool {
58 self.deadline <= self.period
59 }
60}