pmunts wrote on Monday, May 30, 2011:
Using sprintf() in tasks.c causes floating point libraries to be linked when using ARM gcc/newlib toolchains. The following patch to tasks.c allows substituting the integer only siprintf() if the following macro is defined in FreeRTOSConfig.h:
#define portSPRINTF siprintf
– tasks.c.original 2011-05-30 10:25:51.000000000 +0200
+++ tasks.c.new 2011-05-30 10:28:53.000000000 +0200
@@ -74,6 +74,10 @@
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
+#ifndef portSPRINTF
+#define portSPRINTF sprintf
+#endif
+
/*
* Macro to define the amount of stack available to the idle task.
*/
@@ -2232,7 +2236,7 @@
}
#endif
- sprintf( pcStatusString, ( char * ) “%s\t\t%c\t%u\t%u\t%u\r\n”, pxNextTCB->pcTaskName, cStatus, ( unsigned int ) pxNextTCB->uxPriority, usStackRemaining, ( unsigned int ) pxNextTCB->uxTCBNumber );
+ portSPRINTF( pcStatusString, ( char * ) “%s\t\t%c\t%u\t%u\t%u\r\n”, pxNextTCB->pcTaskName, cStatus, ( unsigned int ) pxNextTCB->uxPriority, usStackRemaining, ( unsigned int ) pxNextTCB->uxTCBNumber );
strcat( ( char * ) pcWriteBuffer, ( char * ) pcStatusString );
} while( pxNextTCB != pxFirstTCB );
@@ -2262,7 +2266,7 @@
if( pxNextTCB->ulRunTimeCounter == 0 )
{
/* The task has used no CPU time at all. */
- sprintf( pcStatsString, ( char * ) “%s\t\t0\t\t0%%\r\n”, pxNextTCB->pcTaskName );
+ portSPRINTF( pcStatsString, ( char * ) “%s\t\t0\t\t0%%\r\n”, pxNextTCB->pcTaskName );
}
else
{
@@ -2275,13 +2279,13 @@
{
#ifdef portLU_PRINTF_SPECIFIER_REQUIRED
{
- sprintf( pcStatsString, ( char * ) “%s\t\t%lu\t\t%lu%%\r\n”, pxNextTCB->pcTaskName, pxNextTCB->ulRunTimeCounter, ulStatsAsPercentage );
+ portSPRINTF( pcStatsString, ( char * ) “%s\t\t%lu\t\t%lu%%\r\n”, pxNextTCB->pcTaskName, pxNextTCB->ulRunTimeCounter, ulStatsAsPercentage );
}
#else
{
/* sizeof( int ) == sizeof( long ) so a smaller
printf() library can be used. */
- sprintf( pcStatsString, ( char * ) “%s\t\t%u\t\t%u%%\r\n”, pxNextTCB->pcTaskName, ( unsigned int ) pxNextTCB->ulRunTimeCounter, ( unsigned int ) ulStatsAsPercentage );
+ portSPRINTF( pcStatsString, ( char * ) “%s\t\t%u\t\t%u%%\r\n”, pxNextTCB->pcTaskName, ( unsigned int ) pxNextTCB->ulRunTimeCounter, ( unsigned int ) ulStatsAsPercentage );
}
#endif
}
@@ -2291,13 +2295,13 @@
consumed less than 1% of the total run time. */
#ifdef portLU_PRINTF_SPECIFIER_REQUIRED
{
- sprintf( pcStatsString, ( char * ) “%s\t\t%lu\t\t<1%%\r\n”, pxNextTCB->pcTaskName, pxNextTCB->ulRunTimeCounter );
+ portSPRINTF( pcStatsString, ( char * ) “%s\t\t%lu\t\t<1%%\r\n”, pxNextTCB->pcTaskName, pxNextTCB->ulRunTimeCounter );
}
#else
{
/* sizeof( int ) == sizeof( long ) so a smaller
printf() library can be used. */
- sprintf( pcStatsString, ( char * ) “%s\t\t%u\t\t<1%%\r\n”, pxNextTCB->pcTaskName, ( unsigned int ) pxNextTCB->ulRunTimeCounter );
+ portSPRINTF( pcStatsString, ( char * ) “%s\t\t%u\t\t<1%%\r\n”, pxNextTCB->pcTaskName, ( unsigned int ) pxNextTCB->ulRunTimeCounter );
}
#endif
}