function compute_less_equal (My_Tasks : in Tasks_Set; Processor_Name : in Unbounded_String) return MY_ARRAY; is type MY_ARRAY is array(1..10) of INTEGER; rightvalue : Double; Q,leftvalue : MY_ARRAY; k: integer:=1; begin While (leftvalue(k-1) <= rightvalue) loop leftvalue(k) :=W_i(My_Tasks,k,To_Unbounded_String("CPU_A")) ; rightvalue :=(Current_Task.period)*(1+k); Q(k):= k; k:=k+1; end loop return leftvalue; end compute_less_equal; function W_i (My_Tasks : in Tasks_Set; q:in integer; Current_Task : in Generic_Task_Ptr ) return Double; is Iterator : Tasks_Iterator; Taskj : Generic_Task_Ptr; calcul, tmp : Double; begin calcul := 0.0; tmp:=-0.1; While (tmp/=calcul) loop reset_iterator (My_Tasks, Iterator); tmp :=calcul; calcul := (Double(Current_Task.capacity))*(1+q); loop current_element (My_Tasks, Taskj, Iterator); if (Taskj.priority > Current_Task.priority) then calcul := calcul + double((Double(Taskj.capacity))*(Double'Ceiling((Double(Periodic_Task_Ptr (Taskj).jitter)+tmp)/(Double(Periodic_Task_Ptr (Taskj).period))))); end if; exit when is_last_element (My_Tasks, Iterator); next_element (My_Tasks, Iterator); end loop; end loop; return calcul; end W_i; function max_r_i (My_Tasks : in Tasks_Set; W_i : in MY_ARRAY; Current_Task : in Generic_Task_Ptr ) return Double is Iterator : Tasks_Iterator; Taski : Generic_Task_Ptr; q,k:integer; begin calcul := 0.0; current_element (My_Tasks, Taski, My_Iterator); k := w_i'Length; max :=0; for q in 0..k loop calcul := Double(Periodic_Task_Ptr(Taski).jitter+Double(Periodic_Task_Ptr(Taski).blocking_time + sW_i(q)-q*Double(Periodic_Task_Ptr(Taski).period; if calcul > max then max:=calcul; end if; end loop; return max; end max_r_i;