This is how to do it (example is for HCS12 but should be similar for any MCU):
In the .prm file, make sure the reset isr is your own custom-made one and not _Startup(). In this example the reset isr is called "interrupt_reset":
#pragma TRAP_PROC
void interrupt_reset(void)
{
#pragma MESSAGE DISABLE C12053 /* Disable LDS warning */
asm LDS ... /* set stack pointer */
(void) main();
}
I strongly recommend doing the above on any Codewarrior program. It will work fine as long as you are aware that your statics/globals aren't initialized any longer.
Reasons to get rid of it (taken from another recent post of mine):
One problem is that the copy-down code will add plenty of "startup-lag" at the beginning of the program. Lets say you have several kb of objects with static storage duration: it will take quite some time before they are set, which might be bad for program performance. But worse: during this time, hardware registers will have out-of-reset values, including the COP register. This might in worst case cause unwanted behavior of the MCU.
One such example is all port I/O pins that are not connected to external resistors. I/O pins are always set as inputs out of reset on Freescale micros. If such pins are exposed to ESD during the startup time the MCU might be damaged, as your code has yet to either set them to outputs or to activate internal pull resistors.
The next problem is electronical: you can never rely on RAM cells during long periods of time. The program might in some cases run for years before a certain variable is used. Therefore, you cannot assume that those variables initialized by the copy-down code still have the correct values when using them.