vb2002 发表于 2024-6-5 23:32
你也是用的LX51?
他和BL51有什么区别哦
我感觉我默认就是BL51
LX51是功能更强大的链接器程序。BL51是基础版的
这是keil官方论坛里的权威答复
LX51 增强型链接器提供以下功能: 在 BL51 Code Banking Linker 中不可用。
特殊 ROM 处理
LX51 链接器提供用于处理 SROM 内存类 存储在 ROM 中但复制到 RAM 的段或内存类 执行。
段和类信息
LX51 链接器创建可用于获取的特殊符号 地址和长度信息,用于 应用。
库表优化
LX51 链接器允许您在 重置。此优化减小了 bank 间跳转的大小 桌子。
用户提供的内存类
USERCLASS 指令(用于 C51 和 CX51 编译器)允许您 为编译器生成的段指定类名。
支持 XDATA 常量
你可以在远 const 内存空间(即 位于 ROM 中。
链接器代码打包
此链接器优化可将程序总大小减少多达 8%。
AJMP/ACALL 优化
使用此优化时,链接器会重新排列程序段 因此,使用 AJMP 和 ACALL 指令(而不是 LJMP 和 LCALL)。
全局汇编器代码文件
链接器可以生成程序范围的混合源/反汇编 清单。
远存储器支持
LX51 链接器支持高达 8 MB 的代码和 8 MB 的数据 空间。
区分大小写的符号名称
符号名称现在区分大小写。
详细的数据类型检查
详细信息包含在所有程序的 object 模块中 对象(如变量、函数、函数参数列表、联合、 structs 等)。LX51 Linker 在对象之间比较这些 模块中,并报告任何不匹配的情况。这可以帮助您找到细微的 函数、结构和 变量。
支持多达 64 个 Code BankCode
银行程序现在可支持多达 4 MB 的程序 空间。
本帖最后由 VCC 于 2024-11-28 16:05 编辑
VCC 发表于 2024-11-28 15:52
vb2002 发表于 2024-6-5 23:32
你也是用的LX51?
他和BL51有什么区别哦
原帖地址:
community.arm.com/support-forums/f/keil-forum/21381/difference-between-the-bl51-linker-and-the-lx51-linker
喔,我好像找到了在论坛里发链接的小窍门!只要去掉开头的https就好了
官方文档(可在keil C51安装目录里找到)
BL51LX51
VCC 发表于 2024-11-28 15:57
原帖地址:
community.arm.com/support-forums/f/keil-forum/21381/difference-between-the-bl51-linker- ...
我要用lx51才可以官方那个不停电下载的那个库 本帖最后由 VCC 于 2024-11-28 18:14 编辑
vb2002 发表于 2024-11-28 16:29
我要用lx51才可以官方那个不停电下载的那个库
稍微研究了一下
不仅链接器有BL51和LX51两个版本
库打包器也有LIB51和LIBX51两个版本&"C:\Keil_v5\C51\BIN\LIB51.EXE" LIST stc_usb_cdc_8h_data_interrupt.LIB
LIB51 LIBRARY MANAGER V4.30.1.0
COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2014
*** ERROR 217: NOT A LIBRARY
FILE: STC_USB_CDC_8H_DATA_INTERRUPT.LIB
&"C:\Keil_v5\C51\BIN\LIBX51.EXE" LIST stc_usb_cdc_8h_data_interrupt.LIB
LIBX51 LIBRARY MANAGER V4.30.1.0
COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2014
LIBRARY: STC_USB_CDC_8H_DATA_INTERRUPT.LIB
USB
USB_DESC
USB_REQ_CLASS
USB_REQ_STD
USB_REQ_VENDOR
UTIL
分别尝试用LIB51和LIBX51来识别这个lib文件,发现只有LIBX51能识别
显然说明这个库是用LIBX51制作的
进一步查阅文档发现
编译器生成的目标文件obj文件也有OMF51(旧)和OMF2(新)两种格式
LIBX51支持把OMF51(旧)和OMF2(新)打包为OMF2格式的lib文件
LIB51支持把OMF51(旧)打包为OMF51格式的lib文件
测试一下这个lib文件里面的obj文件是什么格式
&"C:\Keil_v5\C51\BIN\LIB51.EXE" TRANSFER stc_usb_cdc_8h_data_interrupt.LIB TO stc_usb_cdc_8h_data_interrupt2.LIB
&"C:\Keil_v5\C51\BIN\LIBX51.EXE" EXTRACT "stc_usb_cdc_8h_data_interrupt.LIB (USB)" TO stc_usb_cdc_8h_data_interrupt_USB.obj
&"C:\Keil_v5\C51\BIN\LIBX51.EXE" EXTRACT "stc_usb_cdc_8h_data_interrupt.LIB (USB_DESC)" TO stc_usb_cdc_8h_data_interrupt_USB_DESC.obj
&"C:\Keil_v5\C51\BIN\LIBX51.EXE" EXTRACT "stc_usb_cdc_8h_data_interrupt.LIB (USB_REQ_CLASS)" TO stc_usb_cdc_8h_data_interrupt_USB_REQ_CLASS.obj
&"C:\Keil_v5\C51\BIN\LIBX51.EXE" EXTRACT "stc_usb_cdc_8h_data_interrupt.LIB (USB_REQ_STD)" TO stc_usb_cdc_8h_data_interrupt_USB_REQ_STD.obj
&"C:\Keil_v5\C51\BIN\LIBX51.EXE" EXTRACT "stc_usb_cdc_8h_data_interrupt.LIB (USB_REQ_VENDOR)" TO stc_usb_cdc_8h_data_interrupt_USB_REQ_VENDOR.obj
&"C:\Keil_v5\C51\BIN\LIBX51.EXE" EXTRACT "stc_usb_cdc_8h_data_interrupt.LIB (UTIL)" TO stc_usb_cdc_8h_data_interrupt_UTIL.obj
然后
&"C:\Keil_v5\C51\BIN\LIB51.EXE" CREATE stc_usb_cdc_8h_data_interrupt_lib51.LIB
&"C:\Keil_v5\C51\BIN\LIB51.EXE" ADD "stc_usb_cdc_8h_data_interrupt_UTIL.obj,stc_usb_cdc_8h_data_interrupt_USB_REQ_VENDOR.obj,stc_usb_cdc_8h_data_interrupt_USB_REQ_STD.obj,stc_usb_cdc_8h_data_interrupt_USB_REQ_CLASS.obj,stc_usb_cdc_8h_data_interrupt_USB_DESC.obj,stc_usb_cdc_8h_data_interrupt_USB.obj" TO stc_usb_cdc_8h_data_interrupt_lib51.LIB
&"C:\Keil_v5\C51\BIN\LIBX51.EXE" CREATE stc_usb_cdc_8h_data_interrupt_libx51.LIB
&"C:\Keil_v5\C51\BIN\LIBX51.EXE" ADD "stc_usb_cdc_8h_data_interrupt_UTIL.obj,stc_usb_cdc_8h_data_interrupt_USB_REQ_VENDOR.obj,stc_usb_cdc_8h_data_interrupt_USB_REQ_STD.obj,stc_usb_cdc_8h_data_interrupt_USB_REQ_CLASS.obj,stc_usb_cdc_8h_data_interrupt_USB_DESC.obj,stc_usb_cdc_8h_data_interrupt_USB.obj" TO stc_usb_cdc_8h_data_interrupt_libx51.LIB
发现 stc_usb_cdc_8h_data_interrupt_lib51.LIB 文件几乎是空白
而 stc_usb_cdc_8h_data_interrupt_libx51.LIB 文件和原本的stc_usb_cdc_8h_data_interrupt.LIB一模一样
说明这个文件里面打包的是OMF2格式的obj文件
因此无法被lib51打包,只能被libx51打包
static/image/hrline/1.gif
对比来看 AI8051U_8_MDU32.LIB 则是OMF51格式的lib文件,因为LIB51和LIBX51都能识别这个文件
> &"C:\Keil_v5\C51\BIN\LIB51.EXE" LIST AI8051U_8_MDU32.LIB PUBLICS
LIB51 LIBRARY MANAGER V4.30.1.0
COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2014
LIBRARY: AI8051U_8_MDU32.LIB
AI8051U_8_MDU32
?C?LIMUL
?C?LMUL
?C?SLDIV
?C?ULDIV
?C?ULIDIV
> &"C:\Keil_v5\C51\BIN\LIBX51.EXE" LIST AI8051U_8_MDU32.LIB PUBLICS
LIBX51 LIBRARY MANAGER V4.30.1.0
COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2014
LIBRARY: AI8051U_8_MDU32.LIB
AI8051U_8_MDU32
?C?LIMUL
?C?LMUL
?C?SLDIV
?C?ULDIV
?C?ULIDIV
判断方法:
OMF51格式的lib文件,文件头0x2C 0x07
OMF2格式的lib文件,文件头0xAC 0x07
obj文件似乎无法通过文件头判断
页:
1
[2]