When developing libraries for embedded systems, its is important to keep the code size under control due to the limited amounts of available memory.
This article discusses a method for using the GCC pre-processor to implement a mechanism to control which functions are included and which are excluded from a library.
A pre-processor identifier is associated to each function that we want to control (from here on referred to as conditional function), for instance, for a function called my_function, the pre-processor identifier MYFUNCSPLIT could be used.
#ifdef MYFUNCSPLIT myfunction() { } #endif
#ifndef SPLITFILE #define MYFUNCSPLIT1 #define MYFUNCSPLIT2 #define MYFUNCSPLIT3 ... #endif
Now when we want to control function inclusion, we need to define the pre-processor identifier SPLITFILE and the pre-processor identifiers of the functions that we need to include.
For example, the command line for including myfunction2 and myfunction3 while excluding myfunction1 would be :
gcc -DSPLITFILE -DMYFUNCSPLIT2 -DMYFUNCSPLIT3
What happens is that by defining the pre-processor identifier SPLITFILE, none of the pre-processor identifiers MYFUNCSPLITX will be defined because of what we have done in Step (B) when preparing the code. This means that only functions for which pre-processor identifiers were defined manually using the gcc -D option will be compiled.
| Labels: coding, embedded |
|