comp.lang.ada
 help / color / mirror / Atom feed
From: jan.de.kruyf@gmail.com
Subject: Re: longest path through a task
Date: Sat, 30 May 2015 03:50:07 -0700 (PDT)
Date: 2015-05-30T03:50:07-07:00	[thread overview]
Message-ID: <2d9213b2-dc45-4ace-be1b-0436bfa43690@googlegroups.com> (raw)
In-Reply-To: <ly382f9wgy.fsf@pushface.org>

On Friday, May 29, 2015 at 6:31:27 PM UTC+2, Simon Wright wrote:

> 
> > Just did some measurements (clumsily) using the Cortex-M4 counter as
> > in [1], and from entering the Ada handler to the triggered task
> > starting to execute averaged at 1200 cycles (6.7 us) with -Og, 1070
> > cycles (5.9 us) with -O2. There is some code in the C handler to
> > redirect to the Ada handler: see [2], starting at line 236.
> 
> The code in the C handler takes 150 cycles.
> 
> So, for my FreeRTOS-based RTS, interrupt to Ada handler is 150 cycles,
> Ada handler to task is 1200 cycles, grand total 1350 cycles or 7.5
> microseconds (core clock 180 MHz).
> 
> I understand that a 1-millisecond tick is inadequate for some control
> applications (though the Crazyflie seems to do OK with FreeRTOS); maybe
> one could use one of the other timers on the STM32F4 to act as the basis
> for the hard control loop, while retaining the Ada tasking for less
> demanding aspects?

Yes a person can, You can also modify the runtime.

it is in bbbosu.adb:

   -----------------------
   -- Sys_Tick Handling --
   -----------------------

   --  We use the Sys_Tick timer as a periodic timer with 1 kHz rate. This
   --  is a trade-off between accurate delays, limited overhead and maximum
   --  time that interrupts may be disabled.

   Tick_Period   : constant Timer_Interval := Clock_Frequency / 1000;

-----------------

But from too much looking at that code I got squint eyes ;)

In any case based on that comment and my experience I thought I will construct a single thread multitask environment, which is easy. The programming for a novice will be a bit more complex especially when you have hard deadlines.
It is basically just a choice.

I did find a write-up from Brega on the Xoberon runtime, I am still looking for the code. In any case they did have multi-threading but mixed it with hard task dead times, and some more tricks, quite a feat.

Now back to my kernel module, I am making good progress, but it is hairy, at least if you want to have any runtime at all. And I cant use gnat for linking either. So I do every step by hand. 
cheers,

j.


  reply	other threads:[~2015-05-30 10:50 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-27 19:38 longest path through a task jan.de.kruyf
2015-05-27 20:09 ` Niklas Holsti
2015-05-28  6:54   ` jan.de.kruyf
2015-05-28  9:04     ` Niklas Holsti
2015-05-28 12:27       ` brbarkstrom
2015-05-28 14:01         ` jan.de.kruyf
2015-05-28 13:04       ` jan.de.kruyf
2015-05-29  4:38         ` Niklas Holsti
2015-05-28 16:37     ` Simon Wright
2015-05-28 17:43       ` jan.de.kruyf
2015-05-28 17:52         ` Simon Wright
2015-05-28 18:12           ` jan.de.kruyf
2015-05-29 16:31       ` Simon Wright
2015-05-30 10:50         ` jan.de.kruyf [this message]
2015-06-01 13:32         ` Patrick Noffke
2015-06-01 19:09           ` Simon Wright
2015-06-02 22:15           ` Stephen Leake
2015-06-01  4:27   ` Windows Text_IO.Get_Line issue tornenvi
2015-06-01  5:01     ` tornenvi
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox