Hello,
Let me start by saying that I have solved the problem I will describe below in what I consider a not so elegant way. I am curious to know why previous attempt I have made failed so here I am. I have 2 executables - A and B. I want to add B to A as a library (hoping to reuse B later for similar processors...). B contains an ISR that I prefer keeping in B. When I build B as a library and resolve all the obvious issues after inserting into A (SysTick, configuration etc.) I see that A fails. The map file of A indicates why: the ISR contained in B remained unresolved but linking succeeds because it is a weak function. I tried to explicitly import it to no avail. What I did not try it remapping the vector table and changing the cell dedicated to the IRQ in question to contain the address of the handler in B. What I did try and works was build the ISR into A and call an API in B to handle it. I wonder why ISR names cannot be resolve during link time - or maybe the toolchain can do that but I missed the method?
Thanks in advance.
I think you have (somewhat) misunderstood what the document said: the problem was with the WEAK attribute - not the fact that they are ISRs as such?
That's right - the document refers to symbols, and the ISR is just yet another one.
IF you do not provide a WEAK "default" handler in your main code, the linker will resolve to the handler in the Library.
Hi,
I believe I tried that (by removing references from the startup file) - but still, the linker could not resolve the symbol. I may have forgotten a detail, I may try again but I'm less than motivated now :-) Thanks anyway.
I am way too busy to guide and teach you now. You must find motivation tapeer. Especially if you want to get to the high leader firmware creator level.
Always yo're freind.
Zeusti