找回密码
 立即注册
楼主: vb2002

刚刚我调用最新的lib库,搞错一个东西.和大家分享一下我的错误

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2024-11-28 15:52:28 | 显示全部楼层
本帖最后由 VCC 于 2024-11-28 15:55 编辑

vb2*** 发表于 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 的程序 空间。

联系我请点击左下角的【回复】按钮,否则我收不到消息提
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2024-11-28 15:57:31 | 显示全部楼层
本帖最后由 VC*** 于 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
bl51.chm (409.45 KB, 下载次数: 43) lx51.chm (495.84 KB, 下载次数: 41)

联系我请点击左下角的【回复】按钮,否则我收不到消息提
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 00:50:51
已绑定手机

130

主题

1520

回帖

1859

积分

金牌会员

积分
1859
发表于 2024-11-28 16:29:55 来自手机 | 显示全部楼层
VCC 发表于 2024-11-28 15:57
原帖地址:

community.arm.com/support-forums/f/keil-forum/21381/difference-between-the-bl51-linker- ...

我要用lx51才可以官方那个不停电下载的那个库
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2024-11-28 17:34:56 | 显示全部楼层
本帖最后由 VCC 于 2024-11-28 18:14 编辑
vb2*** 发表于 2024-11-28 16:29
我要用lx51才可以官方那个不停电下载的那个库

稍微研究了一下


不仅链接器有BL51和LX51两个版本

库打包器也有LIB51和LIBX51两个版本
  1. &"C:\Keil_v5\C51\BIN\LIB51.EXE" LIST stc_usb_cdc_8h_data_interrupt.LIB
  2. LIB51 LIBRARY MANAGER V4.30.1.0
  3. COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2014
  4. *** ERROR 217: NOT A LIBRARY
  5.     FILE:    STC_USB_CDC_8H_DATA_INTERRUPT.LIB
  6. &"C:\Keil_v5\C51\BIN\LIBX51.EXE" LIST stc_usb_cdc_8h_data_interrupt.LIB
  7. LIBX51 LIBRARY MANAGER V4.30.1.0
  8. COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2014
  9. LIBRARY: STC_USB_CDC_8H_DATA_INTERRUPT.LIB
  10.    USB
  11.    USB_DESC
  12.    USB_REQ_CLASS
  13.    USB_REQ_STD
  14.    USB_REQ_VENDOR
  15.    UTIL
复制代码


分别尝试用LIB51和LIBX51来识别这个lib文件,发现只有LIBX51能识别




显然说明这个库是用LIBX51制作的

进一步查阅文档发现

截图202411281728461073.jpg

截图202411281729141177.jpg

编译器生成的目标文件obj文件也有OMF51(旧)和OMF2(新)两种格式

LIBX51支持把OMF51(旧)和OMF2(新)打包为OMF2格式的lib文件
LIB51支持把OMF51(旧)打包为OMF51格式的lib文件

测试一下这个lib文件里面的obj文件是什么格式

  1. &"C:\Keil_v5\C51\BIN\LIB51.EXE" TRANSFER stc_usb_cdc_8h_data_interrupt.LIB TO stc_usb_cdc_8h_data_interrupt2.LIB
  2. &"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
  3. &"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
  4. &"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
  5. &"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
  6. &"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
  7. &"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
复制代码


然后

  1. &"C:\Keil_v5\C51\BIN\LIB51.EXE" CREATE stc_usb_cdc_8h_data_interrupt_lib51.LIB
  2. &"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
  3. &"C:\Keil_v5\C51\BIN\LIBX51.EXE" CREATE stc_usb_cdc_8h_data_interrupt_libx51.LIB
  4. &"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打包







对比来看 AI8051U_8_MDU32.LIB 则是OMF51格式的lib文件,因为LIB51和LIBX51都能识别这个文件

  1. > &"C:\Keil_v5\C51\BIN\LIB51.EXE" LIST AI8051U_8_MDU32.LIB PUBLICS
  2. LIB51 LIBRARY MANAGER V4.30.1.0
  3. COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2014
  4. LIBRARY: AI8051U_8_MDU32.LIB
  5.    AI8051U_8_MDU32
  6.       ?C?LIMUL
  7.       ?C?LMUL
  8.       ?C?SLDIV
  9.       ?C?ULDIV
  10.       ?C?ULIDIV
  11. > &"C:\Keil_v5\C51\BIN\LIBX51.EXE" LIST AI8051U_8_MDU32.LIB PUBLICS
  12. LIBX51 LIBRARY MANAGER V4.30.1.0
  13. COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2014
  14. LIBRARY: AI8051U_8_MDU32.LIB
  15.    AI8051U_8_MDU32
  16.       ?C?LIMUL
  17.       ?C?LMUL
  18.       ?C?SLDIV
  19.       ?C?ULDIV
  20.       ?C?ULIDIV
复制代码


判断方法:

OMF51格式的lib文件,文件头0x2C 0x07
OMF2格式的lib文件,文件头0xAC 0x07

obj文件似乎无法通过文件头判断

联系我请点击左下角的【回复】按钮,否则我收不到消息提
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 08:27 , Processed in 0.162699 second(s), 71 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表