We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I am seeing this warning when I try to compile my code
Warning L15: multiple call to segment segment: ?pr?_nvmwrit?nvmem_cc caller1: ?pr?spicommisr?spi_com_cc caller2: ?c_c51startup
I looked through my code, I don't call nvmwrite in spicommisr routine. And what is this c51startup file?
thanks, DG
Anyway, once I specific exclude segment from overlaying analysis, the warnings are all gone.
With the scarce resources of the '51 overlaying analysis is almost mandatory for any project greater than blinky. Get rid of the function pointer instead. You may get by without overlaying analysis for now, but some day you may see "data space overflow" and at that time a restructuring, that should be easy now, may be a 'project'.
Erik
Or...
Simply add the function called via pointer into the call tree where it belongs.
Jon
What do you mean by that? Is that also through linker settings in Keil?
what I have in my code is this, I define typedef struct:
typedef struct { UINT8 Num_Input_Byte; void (*cmdFunc)(void); } cSpiInputStruct_T;
After I receive information from SPI, I check the header then in my super loop, I have this:
void SPIProcess(void) { if (SpiCmdReady) { cSpiInputTbl[SpiCmdIdx].cmdFunc(); SpiCmdReady = FALSE; } }
I am using similar method to handle UART command too and never have any problem there.
Yes. Take a look at the linker manual. There is an entire chapter devoted to this topic.
www.keil.com/.../bl51_ol_manipulations.htm