FreeRTOS Support Archive
The FreeRTOS support forum is used to obtain active support directly from Real
Time Engineers Ltd. In return for using our top quality software and services for
free, we request you play fair and do your bit to help others too! Sign up
to receive notifications of new support topics then help where you can.
This is a read only archive of threads posted to the FreeRTOS support forum.
The archive is updated every week, so will not always contain the very latest posts.
Use these archive pages to search previous posts. Use the Live FreeRTOS Forum
link to reply to a post, or start a new support thread.
[FreeRTOS Home] [Live FreeRTOS Forum] [FAQ] [Archive Top] [August 2009 Threads] Switching ISRsPosted by tgarner on August 1, 2009 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
Cheers
RE: Switching ISRsPosted by MEdwards on August 1, 2009 The Cortex ports only switch within the PendSV interrupt. If a task or an interrupt wants a context switch it pends the PendSV interrupt in software, then when the all other interrupts have completed the PendSV interrupt executes and does the actual context switch.
I don't know if something similar is possible on the LPC2138 but maybe if you can pend a peripheral interrupt in software (one that is not used for anything else) then you could use a similar scheme.
RE: Switching ISRsPosted by tgarner on August 1, 2009 That's a good idea. Thanks. The 2138 has a 32 bit software interrupt request register of which 11 bits are unused. I'll just go ahead and use one :) ( actually 2. There are 2 uarts )
I'll post results if (when :) this works.
RE: Switching ISRsPosted by tgarner on August 2, 2009 Results: Works fine. I don't know if it's worth doing in my case but it doesn't hurt and I can imagine situations where it might help.
Cheers
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|