Quality RTOS & Embedded Software

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


Loading

CRITICAL and return

Posted by Nobody/Anonymous on January 17, 2006
Sorry - this maybe a repost - I'm not sure my first atempt made it through my ADSL which is playing up this morning...

The question is, is it okay to return a global variable inside a critical section :-

inline unsigned short MessagesToSend( void )
{
taskENTER_CRITICAL();
return m_MessagesToSend;
taskEXIT_CRITICAL();
}

rather than the more secure, but slower :-

inline unsigned short MessagesToSend( void )
{
unsigned short Val;
taskENTER_CRITICAL();
Val = m_MessagesToSend;
taskEXIT_CRITICAL();
return Val;
}

TIA

Tim (@vaquita.co.uk)

RE: CRITICAL and return

Posted by Nobody/Anonymous on January 17, 2006
Unfortunately not. This could/would (depending on the port) exit the function with interrupts disabled, leave the stack incorrect and thus not return correctly.

RE: CRITICAL and return

Posted by Nobody/Anonymous on January 17, 2006
Also note the inline request. I assume that if the compiler does inline it, it will be fine. Maybe not though. I'm just not convinced what will happen if it doesn't.

Basically, will the EXIT_CRITICAL bit get called, or will the compiler do what I'm telling it to, and just skip to the end of the routine ?

:
:

Okay, I think I've answered my question. If the compiler is more clever than I think, and fix my dumb errors, then let me know...

Tim


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


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

Careers

FreeRTOS and other embedded software careers at AWS.


Latest News

FreeRTOS kernel V10.0.1 is available for immediate download. Now MIT licensed.


FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

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