> I have been doing some puzzling over the MPLAB linker because it seems to > put code in strange places. Everything you showed looked perfectly normal. I think the CINIT section is something it automatically generates to hold the data for initialized RAM locations. It seems to always be there for me too, even though I never use initialized RAM. I tried several tricks once to get rid of it, but eventually gave up. The way the linker decided where to put your code also makes sense. Too bad you didn't show the linker control file. I'm guessing it's very similar to what I use (the names hint that maybe it IS what I use), which is to create a separate section for each program memory page. The linker tries to place the largest block left into the smallest space that will hold it until all blocks have been placed. However, "hardwired" blocks go where you tell them to go. Since you blocked out the last 100h words of page 3, the remainder of page 3 became the smallest space that would fit subsequent modules. Since your code fits completely within one page, everything got put there except the code at 0 and 4 which was hard wired to those locations. Perfectly reasonable. When you stopped splitting up page 3 the linker put everything in page 0, which also makes sense. Since the RESET and INTR_SVC were hard wired to page 0, the remainder of page 0 became the smallest space to place the other modules in. Of course none of this should really matter. If the code is written right it should run no matter what page it ends up on. ***************************************************************** Embed Inc, embedded system specialists in Littleton Massachusetts (978) 742-9014, http://www.embedinc.com -- http://www.piclist.com hint: The list server can filter out subtopics (like ads or off topics) for you. See http://www.piclist.com/#topics