From: jan.de.kruyf@gmail.com
Subject: Re: silly ravenscar question
Date: Thu, 26 Feb 2015 11:36:07 -0800 (PST)
Date: 2015-02-26T11:36:07-08:00 [thread overview]
Message-ID: <8bde840e-4239-42f0-9a92-410b33163007@googlegroups.com> (raw)
In-Reply-To: <lyoaog3em1.fsf@pushface.org>
On Thursday, February 26, 2015 at 4:57:13 PM UTC+2, Simon Wright wrote:
> said elsewhere, what an odd place to find it!)
indeed! Someone does not use doxygen. How unsettling. . . .
Thanks for your long post. I will look throught it later. There is a lot to be learned still.
Would it be unsettling if I asked why there is no system.ads in the zfp collection?
especially the compiler switches at the end.
Cheers,
j.
>
> > I had a first look at the zfp package. Do you know what would be
> > missing in the language there?
>
> My equivalent has
>
> pragma Restrictions (No_Allocators);
> pragma Restrictions (No_Delay);
> pragma Restrictions (No_Dispatch);
> pragma Restrictions (No_Enumeration_Maps);
> pragma Restrictions (No_Exception_Propagation);
> pragma Restrictions (No_Finalization);
> pragma Restrictions (No_Implicit_Dynamic_Code);
> pragma Restrictions (No_Protected_Types);
> pragma Restrictions (No_Recursion);
> pragma Restrictions (No_Secondary_Stack);
> pragma Restrictions (No_Tasking);
>
> > Because the interrupt latencies in the Ravenscar implementation are
> > NOT pleasant. Adacore has long and involved things before we get to
> > the handler.
>
> My version has the Cortex handler registered as an invocation of my
> dummy_handler macro:
>
> /* Pointer to the interrupt handler wrapper created by Ada; the
> 'object' is the actual PO. */
> typedef void (*handler_wrapper)(void *object);
>
> /* Array, to be indexed from Ada as Interrupt_ID (0 .. 90), of handler
> wrappers. The index values also match IRQn_Type, in
> $CUBE/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f429xx.h.
>
> Called from the weak IRQ handlers defined below if not null.
>
> The Ada side will register handlers here; see
> System.Interupts.Install_Restricted_Handlers. */
> handler_wrapper _gnat_interrupt_handlers[91] = {0, };
>
> /* Parallel array containing the actual parameter to be passed to the
> handler wrapper.
>
> Implemented as parallel arrays rather than array of structs to be
> sure that interrupt_handlers[] is initialized. */
> void * _gnat_interrupt_handler_parameters[91] = {0, };
>
> #define dummy_handler(name, offset) \
> __attribute__((weak)) void name() \
> { \
> if (_gnat_interrupt_handlers[offset]) { \
> _gnat_interrupt_handlers[offset] \
> (_gnat_interrupt_handler_parameters[offset]); \
> } else { \
> while (1) {}; \
> } \
> }
>
> and the Ada handler (as reported by -gnatdg, and the same as for the
> AdaCore RTS) is
>
> procedure buttons__button__handlerP (_object : in out
> buttons__buttonTV) is
> begin
> %push_constraint_error_label ()
> %push_program_error_label ()
> %push_storage_error_label ()
> $system__tasking__protected_objects__single_entry__lock_entry (
> _object._object'unchecked_access);
> buttons__button__handlerN (_object);
> $system__tasking__protected_objects__single_entry__service_entry
> (_object._object'unchecked_access);
> %pop_constraint_error_label
> %pop_program_error_label
> %pop_storage_error_label
> return;
> end buttons__button__handlerP;
>
> I don't know how the % lines translate to code; for me, the Lock_Entry
> call will find that we're in an ISR and do nothing; the HandlerN is the
> code you wrote; and Service_Entry will check to see whether (the) entry
> has been released and execute its code as well if so.
>
> HTH!
next prev parent reply other threads:[~2015-02-26 19:36 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-24 9:07 silly ravenscar question jan.de.kruyf
2015-02-24 10:29 ` Dmitry A. Kazakov
2015-02-24 11:11 ` jan.de.kruyf
2015-02-24 13:38 ` Dmitry A. Kazakov
2015-02-25 8:48 ` jan.de.kruyf
2015-02-25 10:46 ` Dmitry A. Kazakov
2015-02-25 17:35 ` jan.de.kruyf
2015-02-25 17:55 ` Dmitry A. Kazakov
2015-02-26 8:48 ` jan.de.kruyf
2015-02-26 9:47 ` Dmitry A. Kazakov
2015-02-26 12:07 ` jan.de.kruyf
2015-02-26 19:09 ` jan.de.kruyf
2015-02-27 8:58 ` Dmitry A. Kazakov
2015-02-28 19:57 ` jan.de.kruyf
2015-03-01 9:27 ` Dmitry A. Kazakov
2015-03-03 8:42 ` jan.de.kruyf
2015-03-03 10:57 ` Dmitry A. Kazakov
2015-02-24 11:02 ` Jacob Sparre Andersen
2015-02-24 11:23 ` jan.de.kruyf
2015-02-24 13:43 ` Bob Duff
2015-02-25 9:07 ` jan.de.kruyf
2015-02-25 17:50 ` Simon Wright
2015-02-26 7:35 ` jan.de.kruyf
2015-02-26 14:57 ` Simon Wright
2015-02-26 19:36 ` jan.de.kruyf [this message]
2015-02-27 8:45 ` Simon Wright
2015-02-27 9:59 ` jan.de.kruyf
2015-02-28 9:57 ` Simon Wright
2015-02-28 19:08 ` jan.de.kruyf
2015-02-28 20:23 ` Simon Wright
2015-03-03 8:52 ` jan.de.kruyf
2015-02-24 15:30 ` Brad Moore
2015-02-24 16:52 ` Simon Wright
2015-02-25 3:01 ` Dennis Lee Bieber
2015-02-24 11:22 ` slos
2015-02-24 12:16 ` jan.de.kruyf
2015-02-24 11:24 ` J-P. Rosen
2015-02-24 12:10 ` jan.de.kruyf
2015-02-24 13:58 ` Simon Wright
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox