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 using Keil C51 toolset with C51 COMPILER V9.53.0.0 and LX51 LINKER/LOCATER V4.66.30.0 and a device with a 64K code space.
I am using the SEGMENTS directive
SEGMENTS (?PR?*?btldr( C:0xE000 ))
To position all of the code in the "btldr.c" module in a segment starting at 0xE000. I can get that working, and see in the .COD file that it is indeed there.
I then add a single function to btldr.c
void test( void ) { val++ }
and recompile. It is no longer positioned at 0xE000. It is NOT an issue that there is not enough room in the segment. I can change it to 0xD000 and it still is not positioned there.
Can someone explain why this might be happening ?
Thank you
I believe I may have accomplished my goal. I used the Userclass directive at the top of btldr.c,
#pragma userclass (code = IAP)
And then the CLASSES directive in invoking the LX51 linker
CLASSES( CODE_IAP (C:0xE000 - C:0xFF00 ))
In looking at the listing output it appears this is what I wanted.
I am still curious as to why my initial attempt failed the way it did.
Thank you.