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.
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: _PUTCHAR means you have a in your project two 'putchar' functions. 'putchar' is already defined in main.c. So you do not need another module that defines putchar. Therefore remove the putchar.c module from your project.
linking... *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: _PUTCHAR MODULE: .\output\PUTCHAR.obj (PUTCHAR)
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: VARIABLE_NAME MODULE: File_Name1.obj (FILE_NAME) MODULE: File_Name2.obj (FILE_NAME)
Andy, LX51 does this already. It includes a DEFINED: <symbol> information.
"Andy, LX51 does this already." Jolly good!
But not everyone have LX. What about us ? Will it stay this way ?