[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

API modification request



-- snip --
> 
> I was referring to low-level ISRs when talking about "callee". On the
> SH1, they don't receive any arguments.
> 
> On the caller/interrupt-handler-installation side, we use an array of
> pointers to functions and use the IRQ-number as an index into this
> array.

AFAIK, on the SH you currently do

   if( _ISR_Vector_table[ vector])
     (*_ISR_Vector_table[ vector ])( vector );

I can't imagine that being so much cheaper than

   if( _ISR_Vector_table[vector].hdl )
     _ISR_Vector_table[vector].hdl(_ISR_Vector_table[vector].arg);

Again: weigh this change to what your __ISR_Handler() already does.
&_ISR_Vector_table[vector] has to be computed anyways.
Plus, I can't see any impact on the callee (the routine registered with 
the _ISR_Vector_table).

BTW: isn't that a bug a few lines down???

  if(( _Context_Switch_necessary) || (!_ISR_Signals_to_thread_executing))
     {
       _ISR_Signals_to_thread_executing = FALSE;
       _Thread_Dispatch();
     }

I.e. shouldn't you test for _ISR_Signals_to_thread_executing to be
TRUE (libcpu/sh/sh7032/score/cpu_asm.c) ?

-- Till