Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem


Switching ISRs

Posted 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


RE: Switching ISRs

Posted 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 ISRs

Posted 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 ISRs

Posted 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.


[ Back to the top ]    [ About FreeRTOS ]    [ Privacy ]    [ Sitemap ]    [ ]

Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.

Latest News

FreeRTOS v10.2.1 is available for immediate download. MIT licensed, includes 64-bit RISC-V, NXP Cortex-M33 demo, Nuvoton Cortex-M23 demo & STM32H745 dual core (AMP) demo.

NXP tweet showing LPC5500 (ARMv8-M Cortex-M33) running FreeRTOS.

View a recording of the "OTA Update Security and Reliability" webinar, presented by TI and AWS.


FreeRTOS and other embedded software careers at AWS.

FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Cadence Tensilica Cortes

Espressif ESP32

IAR Partner

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers





STMicro RTOS partner supporting ARM7, ARM Cortex-M3, ARM Cortex-M4 and ARM Cortex-M0

Texas Instruments MCU Developer Network RTOS partner for ARM and MSP430 microcontrollers

OpenRTOS and SafeRTOS

Xilinx Microblaze and Zynq partner