So I want to replace a standard function in the C51S library. Shouldn't be too hard, right? I rewrote the function (?C?LMUL to be specific) in assembly and compiled it using the A51 assembler. (processes it without complaint) The code looks like this:
; Segment Definition ?C?LMUL SEGMENT CODE ; Module Start RSEG ?C?LMUL MOV ... ... END
LIB51 DELETE C51S.LIB (?C?LMUL)
LIB51 ADD NEW_LMUL.OBJ (?C?LMUL) TO C51S.LIB >> ERR 223 CANNOT FIND MODULE
LIB51 ADD NEW_LMUL.OBJ TO C51S.LIB LIB51 LIST C51S.LIB
Jon: I had tried making the symbol public also, but when assembling the following...
; Segment Definition ?C?LMUL SEGMENT CODE ; Going Public... PUBLIC ?C?LMUL ; Module Start RSEG ?C?LMUL MOV ... ... END
A segment is not a symbol, therefore you get syntax error. See: http://www.keil.com/appnotes/docs/apnt_149.asp This explains how to structure assembler files. Also you find plenty of examples under http://www.keil.com/support. As a general rule: do not modify C51 run-time libraries. Just add your modifications to an own library.
I can not say this is the cause, but on some library work I have seen the NAME pseudo-op being extremely important. Try inserting a NAME statement. Oh, i recall, if you copy a module to another name to make two slighbtly different libray functions and forget to change the NAME statement in the modified copy, all hell breaks lose with meaningless error messages and who knows what. Erik
You mention including it in the linkage "before" the KEIL libraries. In uVision, would I do this on the BankerLinker Misc tab or as a preprocessor directive in the C code that I am trying to roll this new LMUL into. You can do it this way or an easier way is to just add the LIB file to the project just like it was a C or ASM file. uVision knows how to handle it. Jon
Thanks to all of you for your help and suggestions - I now have it working seamlessly. (The linking process at least - I'll have to finish debuging my new LMUL code tomorrow.) For posterity (as well as the purpose of science) I figured it best if I posted back the solution to the problem. The source code eneded up looking like this...
; Going Public PUBLIC ?C?LMUL ; Segment Definition ?PR?LMUL SEGMENT CODE ; Module Start RSEG ?PR?LMUL ?C?LMUL: MOV ... ... END