Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Real time embedded FreeRTOS mailing list 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem TCP & FAT Training




Loading

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

Cheers

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.

Cheers


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




Copyright (C) 2004-2010 Richard Barry. Copyright (C) 2010-2016 Real Time Engineers Ltd.
Any and all data, files, source code, html content and documentation included in the FreeRTOSTM distribution or available on this site are the exclusive property of Real Time Engineers Ltd.. See the files license.txt (included in the distribution) and this copyright notice for more information. FreeRTOSTM and FreeRTOS.orgTM are trade marks of Real Time Engineers Ltd.

Latest News:

FreeRTOS V9.0.0 is now available for download.


Free TCP/IP and file system demos for the RTOS


Sponsored Links

⇓ Now With No Code Size Limit! ⇓
⇑ Free Download Without Registering ⇑


FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Renesas Electronics Gold Alliance RTOS Partner.jpg

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

Atmel RTOS partner supporting ARM Cortex-M3 and AVR32 microcontrollers

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

Xilinx Microblaze and Zynq partner

Silicon Labs low power RTOS partner

Altera RTOS partner for Nios II and Cortex-A9 SoC

Freescale Alliance RTOS Member supporting ARM and ColdFire microcontrollers

Infineon ARM Cortex-M microcontrollers

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

Cypress RTOS partner supporting ARM Cortex-M3

Fujitsu RTOS partner supporting ARM Cortex-M3 and FM3

Microsemi (previously Actel) RTOS partner supporting ARM Cortex-M3

Atollic Partner

IAR Partner

Keil ARM Partner

Embedded Artists