with AVR.Real_Time; use AVR.Real_Time; -- with AVR.Real_Time.Set_Clock; use AVR.Real_Time.Set_Clock; with GNAT.Calendar; with Ada.Calendar; with Ada.Text_IO; use Ada.Text_IO; with Ada.Real_Time.Timing_Events; use Ada.Real_Time.Timing_Events; with System.Tasking.Utilities; package body AVR.Real_Time.Clock_Impl is -- difference in seconds between 1970-01-01 and 2000-01-01 -- Delta_Epoch_AVR : constant := 946_684_800.0; A_Year : Ada.Calendar.Year_Number; A_Month : Ada.Calendar.Month_Number; A_Day : Ada.Calendar.Day_Number; A_Hour : GNAT.Calendar.Hour_Number; A_Min : GNAT.Calendar.Minute_Number; A_Sec : GNAT.Calendar.Second_Number; A_Ss : Ada.Calendar.Day_Duration; procedure Update; -- protected Clock_Tick is -- procedure Inc_Clock (Ev : in out Timing_Event); -- end Clock_Tick; -- Tick : Timing_Event; -- One_Sec : constant Ada.Real_Time.Time_Span := Ada.Real_Time.Seconds (1); -- protected body Clock_Tick is -- procedure Inc_Clock (Ev : in out Timing_Event) -- is -- use Ada.Real_Time; -- begin -- Inc_Sec; -- Set_Handler (Tick, -- Ada.Real_Time.Time_Span'(One_Sec), -- Handler => Inc_Clock'Access); -- end Inc_Clock; -- end Clock_Tick; task Tick_1s is entry Start; end Tick_1s; task body Tick_1s is begin System.Tasking.Utilities.Make_Independent; accept Start; Put_Line ("Tick_1s started"); loop delay 1.0; -- Inc_Sec; Update; -- Put_Line ("(Tick_1s) inc_sec"); end loop; end Tick_1s; procedure Update is begin GNAT.Calendar.Split (Ada.Calendar.Clock, A_Year, A_Month, A_Day, A_Hour, A_Min, A_Sec, A_SS); Now := AVR.Real_Time.Time'(Year => Year_Number (A_Year - 2000), Month => Month_Number (A_Month), Day => Day_Number (A_Day), Hour => Hour_Number (A_Hour), Min => Minute_Number (A_Min), Sec => Second_Number (A_Sec)); end Update; procedure Init is begin Tick_1s.Start; null; end Init; begin Init; end AVR.Real_Time.Clock_Impl;