blob: b167b005e9daa30402dae38101344c23ac209f8c [file] [log] [blame]
-----------------------------------------------------------------------
-- Code Archetypes for the CHESS Component Model --
-- --
-- Copyright (C) 2011-2012 --
-- University of Padova, ITALY --
-- --
-- Author: Marco Panunzio panunzio@math.unipd.it --
-- --
-- All rights reserved. This program and the accompanying materials --
-- are made available under the terms of the Eclipse Public License --
-- v1.0 which accompanies this distribution, and is available at --
-- http://www.eclipse.org/legal/epl-v20.html --
-----------------------------------------------------------------------
with System_Time;
with Ada.Text_IO; use Ada.Text_IO;
package body Cyclic_Task is
use Ada.Real_Time;
task body Thread_T is
Task_Static_Offset : constant Time_Span := Milliseconds(Static_Offset);
Task_Period : constant Time_Span := Milliseconds(Period);
Next_Time : Time := System_Time.System_Start_Time +
System_Time.Task_Activation_Delay + Task_Static_Offset;
Assigned_Task_ID : constant Task_Gen_ID := My_Task_ID;
Release_Time : Time;
begin
-- Suspend the task until first release;
delay until Next_Time;
Put("Task ");
Put(Natural'Image(Natural(Assigned_Task_ID)));
Put_Line(" first activation");
Task_Loop :
loop
-- First action : enqueue for release
Enqueue_for_Release.all (Release_Time);
-- Execute the sequential operation
Operation.all;
-- Calculate new release time and suspend
Next_Time:= Next_Time + Task_Period;
delay until Next_Time;
end loop Task_Loop;
end Thread_T;
-- procedure Initialize is
-- begin
-- null;
-- end Initialize;
end Cyclic_Task;