I know you have many discussions about warning L16 but I couldn't find one that would match with my problem below. I got a warning L16: uncalled segment - SEGMENT: ?PR?API_module2?MODULE2 which my app had nothing to do with. See code below:
in test.c: ---> app code built with lib1.lib main { api_module1(); } in module1.c: ----> part of lib1.lib volatile char var1 api_module1( void ) { var1 = ... } in module2.c: ----> part of lib1.lib extern volatile char var1 api_module2 ( void ) { if (var1 == ...) }
I created a simple project and linked it and I do not get the same problem you do. Here is the linker MAP file.
BL51 BANKED LINKER/LOCATER V5.03 BL51 BANKED LINKER/LOCATER V5.03, INVOKED BY: C:\KEIL\C51\BIN\BL51.EXE main.obj, .\libprj.LIB TO codeprj RAMSIZE (256) MEMORY MODEL: SMALL INPUT MODULES INCLUDED: main.obj (MAIN) .\libprj.LIB (FUNC1) C:\KEIL\C51\LIB\C51S.LIB (?C_STARTUP) LINK MAP OF MODULE: codeprj (MAIN) TYPE BASE LENGTH RELOCATION SEGMENT NAME ----------------------------------------------------- * * * * * * * D A T A M E M O R Y * * * * * * * REG 0000H 0008H ABSOLUTE "REG BANK 0" DATA 0008H 0001H UNIT ?DT?FUNC1 IDATA 0009H 0001H UNIT ?STACK * * * * * * * C O D E M E M O R Y * * * * * * * CODE 0000H 0003H ABSOLUTE CODE 0003H 000CH UNIT ?C_C51STARTUP CODE 000FH 0005H UNIT ?PR?MAIN?MAIN CODE 0014H 0004H UNIT ?PR?FUNC1?FUNC1 OVERLAY MAP OF MODULE: codeprj (MAIN) SEGMENT +--> CALLED SEGMENT --------------------- ?C_C51STARTUP +--> ?PR?MAIN?MAIN ?PR?MAIN?MAIN +--> ?PR?FUNC1?FUNC1 SYMBOL TABLE OF MODULE: codeprj (MAIN) VALUE TYPE NAME ---------------------------------- ------- MODULE MAIN C:0000H SYMBOL _ICE_DUMMY_ C:000FH PUBLIC main ------- PROC MAIN C:000FH LINE# 3 C:000FH LINE# 4 C:000FH LINE# 5 C:0012H LINE# 7 ------- ENDPROC MAIN ------- ENDMOD MAIN ------- MODULE FUNC1 C:0000H SYMBOL _ICE_DUMMY_ D:0008H PUBLIC libvar C:0014H PUBLIC func1 ------- PROC FUNC1 C:0014H LINE# 3 C:0014H LINE# 4 C:0014H LINE# 5 C:0017H LINE# 6 ------- ENDPROC FUNC1 ------- ENDMOD FUNC1 Program Size: data=10.0 xdata=0 code=24 LINK/LOCATE RUN COMPLETE. 0 WARNING(S), 0 ERROR(S)