in referrence to following code, while generating library, what code would be included? My handler code or user callback function call???
void IRQ_Handler(void) { #if MACRO_ENABLED // My handler code #elif // User handler callback function #endif }
how should i write my code so that both sections are included in the library and the library user gets the power to chose what part he wants to be executed? i could come up with following solution.
#define MACRO_ENABLED ExecuteFlg = MACRO_ENABLED void IRQ_Handler(void) { if(ExecuteFlg) { // My handler code } else if { // User handler callback function } }
is there any other way to achieve this???
A library is something that is precompiled.
Precompiled means all compilation decisions was made before the library output file was generated - the project making use of the library will merge in the library functionality at link time.
So #define, #ifdef etc used inside the library C/C++ files will not work to control functionality.
But compiling in both alternatives into the library, you could have the user of the library either supply a parameter when calling a function/method, or setting a global variable. And it is possible to make use of a #define to control what value that global variable should get as long as that assign happens outside the library and instead happens when the library user compiles their own source code.
My usual path for doing this is:
// The TCallback type pre-defined 'somewhere' static TCallback MyCallback = NULL; // User of the library makes a call to the following: void SetCallback(TCallback NewCallback) { MyCallback = NewCallback; } void IRQ_Handler(void) { if(MyCallback==NULL) { // My handler code } else { (MyCallback)(); } }
Some IDEs providers (like Keil), some developer and third parties provide libraries. How do they achieve this??
Or do they just give a compiled code library with all the functions (at expense of consuming more code area)??
Is there a need of more intelligent library generator tools?? Has it been ages since someone thought about modifying the compiling-linking process??
Did you read that line before hitting the post button?
You need to read up on how a library is linked into a project.
You definitely need to read up on how a library is linked into a project.