Replacing or disabling "printf" calls

Rafael Morales rmorales at iaa.es
Fri Oct 21 09:58:12 UTC 2011


First of all, thank to everybody for your answers.

Below are our conclusions.

0) "mil-std-1553B driver"  /rtems-4.10/src/rtems-4.10/c/src/lib/libbsp/sparc/shared/1553/b1553rt.c)
Not use any printf flavor.


1) "spacewire driver"  /rtems-4.10/src/rtems-4.10/c/src/lib/libbsp/sparc/shared/spw
This the Gaisler's RTEMS 4.10 driver.

In this driver there are printfs in the function "grspw_print_dev"

  .text          0x400105a4     0x2224
/opt/rtems-4.10/sparc-rtems/leon3/lib/librtemsbsp.a(grspw.o)
                 0x400106b4                grspw_print_dev
                 0x4001075c                grspw_print
                 0x400109e4                grspw_device_init
                 0x40010cec                grspw_register_io
                 0x40012660                grspw_init3
                 0x40012770                grspw_init2
                 0x400127b0                grspw_register_drv


The are more print's but encapsulated with #if...#def

In adittion, we have eliminate all printf() calls in our main program and source drivers and
we're sure they're never called, but the problem persists.

2) We have tested several very simple samples (/opt/rtems-4.10/src/rtems-4.10/testsuits/samples/minimum/init.c) without using any
printf() calls or extra drivers. In that sample, the library  "lib_a-svfprintf.o" does not appear in the map.

Using the configuration options indicated in: http://www.rtems.com/wiki/index.php/TinyRTEMS
and removing the option:

#define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM

The library  "lib_a-svfprintf.o" is present in the map.

It seems that the source of "printfs" flavors are related with the use of a file system, indepently if they appear in the main source code or in driver source code.

What is the relationship between the file system and the lib_a-svfprintf.o?


Best regards.






On 10/17/2011 7:31 AM, Ralf Corsepius wrote:


> On 10/17/2011 02:12 PM, Rafael Morales wrote:
>> Hello everyone,
>>
>> We are working in a space project using RTEMS and we are worried about
>> program sizes.
>>
>> Reviewing the map file of a sample program using MIL-STD-1553B and
>> spacewire driver, we have found :
>>
>> 9460 bytes used by lib_a-vfprinft.o
>> 9192 bytes used by lib_a-svfprintf.o
>>
>>
>> Almost 18KB for printing it a lot!
> This actually is very little!
When you are on a PC with GBs of memory, it is.  This is on
a CPU with limited resources -- a space hardened CPU where
memory is expensive.  Someone told me that adding another
RAM module to their board would be USD100K.

The other factor is that it is common to review every line of code
that will be on the target hardware.  If printf() can be eliminated,
this is a significant body of code to review.
>> We are not using "printf" in main program, but we have found it in the
>> source file of MIL-STD-1553B and spacewire driver.
>> Those drivers was originally compiled with RTEMS and are linked with the
>> main program in any compilation.
> Are these source files part of the RTEMS source tree?
>
> If yes, which files are you referring to?
> If no, ... c.f. below.
This is an important point
>> Can any one help us to replace or disable that "printf" calls?
> The only option to get rid of printf is to replace all references to it
> from all code you are using.
If it is in a driver, it is almost certainly debug or status code and 
probably should be
printk().  But without seeing the code, I don't know.
> In most cases, this is hardly possible without fundamentally breaking
> the code.
Not if it is just debug.
--joel
Ralf





More information about the users mailing list