In http://www.keil.com/support/docs/788.htm you described how to change the putchar function. I have coppied PUTCHAR.C to the project directory, and added it to the project source files (using uVision2). As soon as I started to re-build the project, the following error occured: Build target 'Target 1' compiling SIO.C... compiling MAIN.C... compiling PUTCHAR.C... linking... *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: _PUTCHAR MODULE: .\output\PUTCHAR.obj (PUTCHAR) *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?_PUTCHAR?PUTCHAR *** ERROR L118: REFERENCE MADE TO ERRONEOUS EXTERNAL SYMBOL: _PUTCHAR MODULE: C:\KEIL\C51\LIB\C51S.LIB (PRINTF) ADDRESS: 0080H *** ERROR L118: REFERENCE MADE TO ERRONEOUS EXTERNAL SYMBOL: _PUTCHAR MODULE: C:\KEIL\C51\LIB\C51S.LIB (GETCHAR) ADDRESS: 06E2H Program Size: data=50.3 xdata=0 code=1780 Target not created Why ? Where else is putchar defined ? what can I do in order to change putchar ? Another question is where can I see the source code of printf ? Thanks, Amit.
"Sorry, the source code is not public." That is to say, the source for Keil's C51 printf implementation is not public. I'm sure you can find some open-source printf implementation(s); eg, SDCC is open-source: http://sdcc.sourceforge.net/ Of course, that will not be the same as Keil's implementation; no doubt Keil have put a lot of work into optimising their C51 implementation - which is why they're not about to give it away free to all & sundry!
Just to explain, I wanted to have the source in order to debug a printf command that didn't work. this problem was solved, but at that time I wanted to perform the printf command step by step for debug purposes. Amit.
FYI, here is a list of those library functions for which source code is available: http://www.keil.com/support/man/docs/c51/c51_lib_source.htm