I have been using FreeRTOS for quite a while. Works great.
I have a question about serial I/O receive strategy.
I like to have the receive ISR collect incoming characters
until a whole line is received ( Carriage Return detected )
and then unblock whatever task is waiting for a line and
give it to them. I use a counting semaphore to count incoming
lines and the line consumer task blocks on SemaphoreTake. My problem is that if I use a switching ISR, a context
save/restore occurs on every incoming character which seems
like a lot of overhead. I’d like to switch only on receipt of the
CR. I suspect this is not possible because you have to save context before
you know what the incoming char is.
Does anybody have any profound ideas on this ?
I’m currently using a non-switching ISR and the consumer task
only gets the line whenever it’s his turn to run.
BTW mpu is LPC2138 - GNU compiler