找回密码
 立即注册
查看: 728|回复: 14

求助:C251的编译器,编译出现ERROR L121: IMPROPER FIXUP

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 07:09:45

35

主题

189

回帖

833

积分

高级会员

积分
833
发表于 2024-12-9 15:52:13 | 显示全部楼层 |阅读模式

前一段时间发过帖子:

https://www.stcaimcu.com/forum.php?mod=viewthread&tid=11069

有网友给出了不少办法,比如把工程目标设置中的:Code Rom Size改为Huge模式,Extemal Memory中的ROM改为0xFE00000到0x20000,输出文件格式由Hex-80改为Hex-386等,但是没有解决,后来发现把所有的Lcall改为Ecall,Ljmp改为Ejmp后编译通过了,但是写到32G12k128上单片机不运行,单片机没有反应,又把Ecall改回Lcall,编译通过,写到单片机中也可以运行了,但是最近又添加了部分程序,又不行了,后来发现一个办法,添加程序出现错误时,暂时注释掉一部分程序,以添加程序不出现编译错误为准,添加完程序后,再回复以前注释掉的程序,往往可以编译通过,但我觉得这不是个办法,请教各位有无确切的解决办法?谢谢。

无标题.png

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:156
  • 最近打卡:2025-04-29 00:51:09

24

主题

229

回帖

1281

积分

金牌会员

积分
1281
发表于 2024-12-9 16:00:06 | 显示全部楼层
ERROR L121: IMPROPER FIXUP 是一种链接错误,通常意味着在编译过程中出现了错误的地址或偏移量。这种错误可能由以下原因引起:

1. 代码中存在错误的指针或引用,导致链接器无法正确解析地址。
2. 使用了不正确的内存模型或编译选项。
3. 链接器配置文件中存在错误。

要解决这个问题,可以尝试以下步骤:

1. 检查代码中的指针和引用,确保它们是正确的,并且指向有效的地址。
2. 确保使用了正确的内存模型和编译选项。根据您的项目需求,选择适当的内存模型(如大模型、小模型等)和编译选项。
3. 检查链接器配置文件,确保其中的设置是正确的。检查是否有任何语法错误或错误的链接器选项。
4. 如果以上步骤都没有解决问题,请参考编译器的文档或在线资源,以获取更多关于该错误的信息和解决方案。

请注意,具体的解决方案可能因您的项目和使用的编译器而异。如果您能提供更多有关您的项目和使用的编译器的信息,我可以为您提供更详细的帮助。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 07:09:45

35

主题

189

回帖

833

积分

高级会员

积分
833
发表于 2024-12-9 16:27:10 | 显示全部楼层
CyberH*** 发表于 2024-12-9 16:00
ERROR L121: IMPROPER FIXUP 是一种链接错误,通常意味着在编译过程中出现了错误的地址或偏移量。这种错误 ...

谢谢您的回复,
1、程序是用汇编写的,没有用到指针,是别人由PID的单片机语言移植过来的,用的是基本
     的汇编语句。
2、内存模型是Xsmall,改用Large也不行,其他的都是默认选项
3、请问“链接器配置文件”是指的什么?程序开头就是用了包含文件$include (STC32G.INC),
      别的没有其他文件
4、编译器是Keil C 251,项目是消防方面的,具体很抱歉,不方便说,就是消防方面的一个东
     东。


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:156
  • 最近打卡:2025-04-29 00:51:09

24

主题

229

回帖

1281

积分

金牌会员

积分
1281
发表于 2024-12-9 16:34:09 | 显示全部楼层
newl*** 发表于 2024-12-9 16:27
谢谢您的回复,
1、程序是用汇编写的,没有用到指针,是别人由PID的单片机语言移植过来的,用的是基本
  ...

这是使用人工智能生成的答案,我也不知道是什么,没用过C251汇编
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:156
  • 最近打卡:2025-04-29 00:51:09

24

主题

229

回帖

1281

积分

金牌会员

积分
1281
发表于 2024-12-9 16:42:50 | 显示全部楼层
因为使用汇编所有地址都是要自己定义的,需要非常了解使用的单片机,C语言这些都是由编译器自动分配的,所以不会出现这些错误,使用汇编就会出现各种各样C语言没遇到过的错误
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 07:09:45

35

主题

189

回帖

833

积分

高级会员

积分
833
发表于 2024-12-9 16:47:27 | 显示全部楼层

关于这个错误,我最不理解的是,添加程序,出现错误,临时注释掉部分程序,继续添加程序,编译通过后,再恢复注释掉的程序,往往可以编译通过。

回复 支持 反对

使用道具 举报 送花

2

主题

185

回帖

1048

积分

金牌会员

积分
1048
发表于 2024-12-9 16:58:35 | 显示全部楼层
newl*** 发表于 2024-12-9 16:27
谢谢您的回复,
1、程序是用汇编写的,没有用到指针,是别人由PID的单片机语言移植过来的,用的是基本
  ...

用到STC的库了没有,用了几个源程序文件?用汇编了和内存模型就没什么关系了
回复 支持 反对

使用道具 举报 送花

2

主题

185

回帖

1048

积分

金牌会员

积分
1048
发表于 2024-12-9 17:02:57 | 显示全部楼层
看你这代码总共也没超64K
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:351
  • 最近打卡:2025-05-02 07:09:45

35

主题

189

回帖

833

积分

高级会员

积分
833
发表于 2024-12-10 08:05:51 | 显示全部楼层
zxcv*** 发表于 2024-12-9 16:58
用到STC的库了没有,用了几个源程序文件?用汇编了和内存模型就没什么关系了 ...

您好,“用到STC的库了没有”?是指的库函数吗?没有用,只用了包含文件STC32G.INC,整个程序只有一个汇编语言写的文件。
回复 支持 反对

使用道具 举报 送花

2

主题

185

回帖

1048

积分

金牌会员

积分
1048
发表于 2024-12-10 09:55:10 | 显示全部楼层
newl*** 发表于 2024-12-10 08:05
您好,“用到STC的库了没有”?是指的库函数吗?没有用,只用了包含文件STC32G.INC,整个程序只有一个汇 ...

那估计是你的汇编源程序有问题
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 09:00 , Processed in 0.159064 second(s), 115 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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