eva_rt_common/
rt_task.rs

1//! RTTask struct.
2//! 
3//! This module defines the `RTTask` struct, which describes a real-time task
4//! following the standard Liu-Layland model. Real-Time tasks are here
5//! characterized by **Worst Case Execution Time** (WCET), **Relative Deadline**
6//! and **(Minimum Inter-arrival) Period**.
7
8use 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    /// Worst Case Execution Time
20    pub wcet: Time,
21    /// Relative Deadline
22    pub deadline: Time,
23    /// (Minimum Inter-arrival) Period
24    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    /// WCET / Period
37    pub fn utilization(&self) -> f64 {
38        self.wcet.value_ns / self.period.value_ns
39    }
40
41    /// WCET / Deadline
42    pub fn density(&self) -> f64 {
43        self.wcet.value_ns / self.deadline.value_ns
44    }
45
46    /// Deadline - WCET
47    pub fn laxity(&self) -> Time {
48        self.deadline - self.wcet
49    }
50
51    /// Deadline == Period
52    pub fn has_implicit_deadline(&self) -> bool {
53        self.deadline == self.period
54    }
55
56    /// Deadline <= Period
57    pub fn has_constrained_deadline(&self) -> bool {
58        self.deadline <= self.period
59    }
60}