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.
next prev parent 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