I would appreciate any help getting past this problem. I am attempting to write code that I can use to update the program in flash memory. I am using the xc16x_iap-flash example and so far have successfully managed to locate the flash programming section to RAM and am able to erase and write to flash memory from it. The next part has me confused though. When I erase the sector 0xC00000 (beginning of flash memory) the program in RAM stops running. It appears as though constants from my program in RAM are being stored in flash. I assume that I am missing something in the L166 Locate Options, but after trying many combinations I am quite lost on how to set this up correctly. Keil xc16x_iap-flash example: http://www.keil.com/download/docs/xc16x_iap-flash.zip.asp
Without knowing your goal, my suggestion would be to go for a completely separate program that would have as its memory target (ROM) to be 0x420000. You would then add an offset to the final hex file to store in a know sector of the internal Flash of the XC16x (the Flash project would reserve this memory area). You then would combine the two hex files for the XC16x flash memory. Then when the XC16x wants to erase the flash you would perform the copy and jump as you did before. This is normally done when you have a boot and application programs (albeit usually the boot code is stored in the first sector of the XC16x Flash).