Hi Bill,
I’m starting to understand the differences between the micro kernel that
RTP uses, vis the big kernel RTOSes that I’m familiar with. I know where I
want to go, it just isn’t a straight line anymore.
I wouldn’t expect to do a FFT in an ISR, but if I am using the interrupt
to time a task, I would like to give a semaphore to the pended task
directly, wthout having to context switch to a handling thread where I send
a pulse. Or if I collect a bunch of data, I’d like to send it to the
consumer in a non-blocking message rather than context switch to a handler
that unblocks the data collection task. When your dealing with high
interrupt rates, I think this extra context switching can force one to a
faster, more expensive processor that would be required otherwise. For
instance, with a big kernel RTOS, I was able to able to collect data, pack a
message, and send it to the consumer task – all in a ISR servicing a 5 KHz
interrupt. That was on a 25 MHz MVME68040. Right now, I’m having a rough
time servicing a 600 Hz interrupt and performing some associated data
collection and processing on a P166. I’ll probably find a bone-headed thing
that I’ve done that slows it down, but it isn’t obvious, yet.
Again, the difference is that I used to be able to link the kernel along
with the application, so that messaging was easy for the kernel to sort out.
Not so, now. I’m probably still missing the point of a micro kernel, but I
do think it poses some limitations in these particular cases.
Thanks for the advice. I know I’ll need more.
Sincerely,
Dave Kuechenmeister
“Bill Caroselli (Q-TPS)” <QTPS@EarthLink.net> wrote in message
news:asith6$87h$1@inn.qnx.com…
Hi Dave
Allowing messages from ISR would put a big burden on the OS. One that
most
of us don’t want at a critical time.
But it is very easy to get around this. Let your interrupt handler do the
messaging.
“David Kuechenmeister” <> david.kuechenmeister@viasat.com> > wrote in message
news:art76b$oc9$> 1@inn.qnx.com> …
I think there is a little difference in our terminology. My Interrupt
handler blocks on a InterruptWait(), then sends the messages. My ISR
services the hardware interrupt. It returns a sig_event.
However, this is one of the things I consider flawed in QNX. Programmers
should be permitted, at their own risk, to send messages, give
semaphores,
and make other potentially disasterous calls in the ISR. But that isn’t
going to change and I’ll deal with it.
Sincerely,
David Kuechenmeister
\