I currently have 2 in system programming (also acting as bootloaders) designs done up in 8051 assembly but would like to recode them in C. I'm unsure how one goes about doing this based upon the runtime constraints placed on the user when using C.
Just the runtime setup... I'd need another startup file then I need to make sure all my code is in a location in code space that does not get ERASED. Last I tried using C, I recall having an issue with the tools finding ?CSTART label when I did SRC output and assembly. It's certainly easy enough to send a CODE() directive to Keil's linker to make it place a certain segment at a given location in code space. Just check the manual. The warning about C_START probably comes in if you monkey around with the startup sequence in assembly and something in Keil's STARTUP.A51 or INIT.A51 gets broken. As just a general note of encouragement, my last '51 project design implemented a bootloader (or IAP, whatever) in C that works quite well, so it's certainly doable.
We use "bootloaders" a lot. Usually it is because the systems being downloaded are in a multi-drop environment and the in-chip ISP code doesn't handle the enable on the transmitter. In addition, our users are not programmers ... often barely computer literate. Using programs like FlashMagic is much to dangerous (if you specify the wrong chip type it can destroy the micro). We generally have a simple download application run on a PC. The details of erasing memory, setting option bits, and restarting after download are left to the "bootloader".
Using programs like FlashMagic is much to dangerous (if you specify the wrong chip type it can destroy the micro). If you use FM in commandline mode you can create a 'push the button" application. Of course NoTouch will be needed as well. Erik