Hi,
I'm using TMS320F28031 clocking at 60MHz. For improving execution speed I want to run ISRs from ram. Now my ISR contains a few control loops that invoke the IQMath library. So for best performance I need to run the IQMath from RAM too. I did that but saw no improvement in speed. Digging a little deeper I found that even though I've loaded the IQMATH in RAM during runtime, the IQMATH library invokes a few RTS library functions that get linked in FLASH.
For eg:
// IQ Code in ISR
Result = _IQ9int(_IQ9div(X,Y));
generates a .text section in map file like this:
003f7b02 0000001f rts2800_ml.lib : fd_tol.obj (.text)
003f7b21 0000001c : l_tofd.obj (.text)
003f7b3d 00000019 : args_main.obj (.text)
003f7b56 00000019 : exit.obj (.text)
003f7b6f 00000017 : u_tofd.obj (.text)
003f7b86 00000016 : ul_tofd.obj (.text)
The last 2 entries were created because of the call to IQ and they are loaded in flash under the .text section.
So how do I control this process? If IQMath is going to call functions from RTS then it defeats the purpose of loading it in RAM. I'm never going to see an improvement in execution time.
Any suggestions on how to get around this problem?
Regards,
Vivek
PS: On a different note I have observed that if I'm running my ISRs from RAM I'm not able to put a breakpoint in the ISR. Or rather I can put a breakpoint but the execution never halts there. Is this behaviour valid? Any methods to get around this problem?