From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Raspberry Pi, Real-Time and Ada
Date: Sat, 8 Feb 2014 09:56:02 +0100
Date: 2014-02-08T09:56:02+01:00 [thread overview]
Message-ID: <ybhiftk3g12r$.1b5pmrdl7x2kr$.dlg@40tude.net> (raw)
In-Reply-To: 708ef9e4-b6a3-488b-a86d-b70c7de43ac2@googlegroups.com
On Fri, 7 Feb 2014 15:11:20 -0800 (PST), Rego, P. wrote:
>> I don't think that 10ms would be a problem even for ARM.
>> On an Intel board 200µs loops (read inputs, calculate, write outputs) are
>> doable.
>> Ada has everything you need for that.
>> The main problem is how good the RT clock is. Windows and VxWorks typically
>> have miserable RT clock services on x86. x86 Linux has a decent one.
>> Regarding ARM Linux, I didn't tested its clock, so I cannot tell. The
>> primary test is to call Ada.Real_Time.Clock twice and to compare if the
>> reading is same. If they are you should look for an alternative
>> implementation of.
>
> BTW, now I have done a fast test using
>
> with Ada.Real_Time; use Ada.Real_Time;
> with Ada.Text_IO;
>
> procedure My_Clock is
> First_Time : Time;
> Second_Time : Time;
> F_Duration : Time_Span;
> Time_Duration : Duration;
>
> begin
> First_Time := Ada.Real_Time.Clock;
> Second_Time := Ada.Real_Time.Clock;
> F_Duration := Second_Time - First_Time;
> Time_Duration := To_Duration (F_Duration);
>
> Ada.Text_IO.Put_Line (Duration'Image (Time_Duration));
>
> end My_Clock;
>
> and the result was in average 17us for the RPi (with Raspbian without the
> preemptive patch), with a variation of 1 us (for just a few executions),
That looks pretty much slow for a 700MHz processor. You should take a look
what exactly the implementation is (in s-oprim.adb, I suppose).
> while the same code running on a Windows 7x64 machine was sometimes 0,
> sometimes 366ns (49 times faster).
If you look at the implementation of you see that it is based on the
performance counter:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms644904%28v=vs.85%29.aspx
MS does not tell which time source they use for this function. There are
many on an Intel board. That you have 0 to 366ns (which is very poor for an
Intel machine) indicates that probably your machine uses the HPET. HPET
runs at 25MHz or so, which is pitiful for a GHz machine.
I suppose there are some architectural problems with using the TSC on
multi-core machines which is why older single-core Windows machines tend to
have better clocks.
Anyway, you could try to play a bit with the BIOS and BOOT.INI in order to
force Windows not to use HPET (or even worse, the programmable timer).
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2014-02-08 8:56 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-06 0:53 Raspberry Pi, Real-Time and Ada Rego, P.
2014-02-06 7:50 ` Stephen Leake
2014-02-06 8:44 ` Dmitry A. Kazakov
2014-02-06 13:16 ` Simon Clubley
2014-02-06 21:12 ` Rego, P.
2014-02-07 0:26 ` Simon Clubley
2014-02-07 11:44 ` Rego, P.
2014-02-06 21:09 ` Rego, P.
2014-02-06 21:04 ` Rego, P.
2014-02-07 8:28 ` Stephen Leake
2014-02-07 12:09 ` Rego, P.
2014-02-08 8:28 ` Stephen Leake
2014-02-08 9:06 ` Dmitry A. Kazakov
2014-02-10 18:18 ` Rego, P.
2014-02-13 15:23 ` Stephen Leake
2014-02-07 8:42 ` Dmitry A. Kazakov
2014-02-07 12:34 ` Rego, P.
2014-02-07 12:59 ` Dmitry A. Kazakov
2014-02-07 13:25 ` Rego, P.
2014-02-07 23:11 ` Rego, P.
2014-02-08 8:56 ` Dmitry A. Kazakov [this message]
2014-02-10 18:29 ` Rego, P.
2014-02-10 20:38 ` Dmitry A. Kazakov
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox