Quality RTOS & Embedded Software

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




Loading

Patch for missing #if in tasks.c

Posted by Philip Munts on May 30, 2011
tasks.c is missing #if ( configGENERATE_RUN_TIME_STATS == 1 ) bracketing the call to portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() at line 1122.

--- tasks.c(revision 2690)
+++ tasks.c(revision 2692)
@@ -1116,11 +1116,13 @@
xSchedulerRunning = pdTRUE;
xTickCount = ( portTickType ) 0;

+ #if ( configGENERATE_RUN_TIME_STATS == 1 )
/* If configGENERATE_RUN_TIME_STATS is defined then the following
macro must be defined to configure the timer/counter used to generate
the run time counter time base. */
portCONFIGURE_TIMER_FOR_RUN_TIME_STATS();
-
+#endif
+
/* Setting up the timer tick is hardware specific and thus in the
portable interface. */
if( xPortStartScheduler() )

RE: Patch for missing #if in tasks.c

Posted by Richard on May 30, 2011
I don't understand this patch and can only assume you are using an old version of FreeRTOS or have modified the code yourself. If an #endif was missing, nothing would compile, surely?

The code between lines 1104 and 1135 looks like this, there are no conditional compilations.

if( xReturn == pdPASS )
{
/* Interrupts are turned off here, to ensure a tick does not occur
before or during the call to xPortStartScheduler(). The stacks of
the created tasks contain a status word with interrupts switched on
so interrupts will automatically get re-enabled when the first task
starts to run.

STEPPING THROUGH HERE USING A DEBUGGER CAN CAUSE BIG PROBLEMS IF THE
DEBUGGER ALLOWS INTERRUPTS TO BE PROCESSED. */
portDISABLE_INTERRUPTS();

xSchedulerRunning = pdTRUE;
xTickCount = ( portTickType ) 0;

/* If configGENERATE_RUN_TIME_STATS is defined then the following
macro must be defined to configure the timer/counter used to generate
the run time counter time base. */
portCONFIGURE_TIMER_FOR_RUN_TIME_STATS();

/* Setting up the timer tick is hardware specific and thus in the
portable interface. */
if( xPortStartScheduler() )
{
/* Should not reach here as if the scheduler is running the
function will not return. */
}
else
{
/* Should only reach here if a task calls xTaskEndScheduler(). */
}
}


regards.

RE: Patch for missing #if in tasks.c

Posted by Philip Munts on May 30, 2011
I am using 7.0.1. It is the added #if that is the key thing, not a missing #endif. You should not try to call portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() (which is at tasks.c line 1122) if configGENERATE_RUN_TIME_STATS is not defined. Of course, defining portCONFIGURE_TIMER_FOR_RUN_TIME_STATS as a null macro in FreeRTOSConfig.h works just as well, but it seems cleaner to me not to try to call it in the first place.

RE: Patch for missing #if in tasks.c

Posted by Dave on May 30, 2011
If portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() is not defined then it will get automatically removed by code in FreeRTOS.h

#ifndef portCONFIGURE_TIMER_FOR_RUN_TIME_STATS
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()
#endif


If you have a problem compiling then it is likely the header files are not included in the correct order, although it should not be a problem compiling tasks.c. Have you made any changes to the code?


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




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

Latest News

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


FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

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