getc()
Peter Nguyen
petern at cs.adelaide.edu.au
Thu Apr 26 03:50:21 CEST 2007
OK, so with that in mind, where does the polling take place? I might be
wrong in saying this, but is there a portion of code that deals directly
with the polling of I/O? The reason i ask this is that i think that the
polling of I/O has an affect on the performance monitoring facilities, more
specifically when a performance counter overflows. This would, in turn,
have an affect on the ability to take samples given that samples might not
be taken while waiting for input.
Peter
Ben Leslie-2 wrote:
>
> On Sun Apr 22, 2007 at 06:18:19 -0700, Peter Nguyen wrote:
>>
>>Hi,
>>
>>I'm currently messing around with L4 at the moment. More specifically,
i'm
>>providing some facilities for profiling in L4 via sampling. Right now,
i'm
>>trying to implement an exception handler for the Performance Measurement
>>Counters on the PowerPC architecture. In providing calls to these
>>facilities via the pingpong root-task, i seem to run into problems with
>>input. Essentially, while the root-task is waiting for user input, it
seems
>>as if the exception is not kicking in until i enter a character. The
>>exception that should be handled is a performance monitor exception (where
>>one of the counters overflow). Basically, the overflow takes place such
>>that a significant amount of instructions have been executed when
>>theoretically it should be signalled earlier.
>>
>>In accepting input, the root-task (which i didn't write myself) uses
getc()
>>to obtain such input. My question is basically whether getc() blocks
>>everything and sits there until a character is received? I suspect that
>>this is most certainly the case. If so, does anyone know whether there
are
>>other facilities available for provide an alternative means for providing
>>input in an application. The reason why i am asking about whether getc()
is
>>a factor or not is that in providing an infinite loop, the
>>exception/interrupt kicks in at the right time ie. when the counter
>>overflows, the resulting counter value is slightly above the overflow
value
>>eg. the counter overflows when the contents of the register is 0x80000000.
>>When the exception kicks in, the "final" value is 0x80000012 as opposed to
a
>>random value in the case with a root-task that requests input.
>>
>>Any help would be greatly appreciated.
>>
>
> Hi Peter,
>
> Which version of L4 are you using?
>
> It is certainly the case that in NICTA's L4-embedded (now OKL4), and the
> L4Ka kernel, that a root task getc() ends up calling
> L4_KDB_ReadChar_Blocked(),
> which as you correctly surmiase ends up just polling inside the kernel
> waiting for serial input.
>
> I suspect that if you are using Dresden L4 it is probably also the case.
>
> Cheers,
>
> Ben
>
>
> _______________________________________________
> l4-hackers mailing list
> l4-hackers at os.inf.tu-dresden.de
> http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers
>
>
--
View this message in context: http://www.nabble.com/getc%28%29-tf3626544.html#a10192876
Sent from the L4 mailing list archive at Nabble.com.
More information about the l4-hackers
mailing list