找回密码
 立即注册
楼主: 王昱顺

解决编译器【REMOVEUNUSED选项】,可能错误移除问题,现象是感觉复位了

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2218

回帖

5450

积分

版主

积分
5450
发表于 2025-3-18 09:49:38 | 显示全部楼层
erci*** 发表于 2025-3-17 23:47
提供一个简单粗暴的解决办法,在头文件中宏替换main函数,看看是否可行:

好方法,这样用户部分就成无感调用了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2218

回帖

5450

积分

版主

积分
5450
发表于 2025-3-18 10:24:55 | 显示全部楼层
erci*** 发表于 2025-3-17 23:47
提供一个简单粗暴的解决办法,在头文件中宏替换main函数,看看是否可行:

有一点小问题,就是main函数最开头定义变量话会因为C89格式问题导致报错
这里修改了一下

  1. #include "stdio.h"
  2. extern void _m(void);//修正编译器的LCALL 0x0000异常
  3. #define main(x) main(x){_m();while(P0|!P0);sprintf(0, "0");}; void _m(x)
复制代码

这样编译就正常了
截图202503181024253279.jpg
开头定义变量也没问题,因为while(1)的存在,sprintf实际没有执行,但是可以保证编译正常,并且用户区没有写while(1)的时候也不会跑飞



点评

手动点赞~  发表于 2025-3-18 10:31
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:473
  • 最近打卡:2025-05-01 08:58:09

0

主题

50

回帖

189

积分

注册会员

积分
189
发表于 2025-3-18 11:58:06 | 显示全部楼层
为啥不修改usb库呢?

点评

您好,USB库早在昨天已经修改完成,现在并没有任何问题。 这个Bug是编译器通用bug,可以查看前面的最小触发LCALL问题工程,其中并不包含USB库。 这个方案是通用解决方案,后续更新头文件后,即可无感修复这个问题  详情 回复 发表于 2025-3-18 12:26
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2218

回帖

5450

积分

版主

积分
5450
发表于 2025-3-18 12:26:57 | 显示全部楼层
eda*** 发表于 2025-3-18 11:58
为啥不修改usb库呢?

您好,USB库早在昨天已经修改完成,现在并没有任何问题。
这个Bug是编译器通用bug,可以查看前面28#的最小触发LCALL问题工程,其中并不包含USB库。
现在的是通用解决方案,后续更新头文件后,即可无感修复这个问题
截图202503181230082790.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-3-18 15:55:25 | 显示全部楼层
  1. #include "stdio.h"
  2. extern void _m(void);//修正编译器的LCALL 0x0000异常
  3. #define main(x) main(x){_m();while(1);sprintf(0, "0");}; void _m(x)
复制代码


不能这样改,while(1);之后的语句会被认为访问不到优化掉。

这样改把编译器绕晕
截图202503181554468451.jpg

点评

我测试过了,不需要实际执行,只需要让他在那里就行 执行不到也是可以的 我那个写法也可以让LCALL问题消失  详情 回复 发表于 2025-3-18 16:39
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2218

回帖

5450

积分

版主

积分
5450
发表于 2025-3-18 16:39:41 | 显示全部楼层
erci*** 发表于 2025-3-18 15:55
不能这样改,while(1);之后的语句会被认为访问不到优化掉。

这样改把编译器绕晕

我测试过了,不需要实际执行,只需要让他在那里就行
执行不到也是可以的
我那个写法也可以让LCALL问题消失
你可以试试
你的程序中给bug()函数部分屏蔽了
这样是无法复现LCALL问题的,取消屏蔽你再试试加入这个写法和屏蔽这个写法
用编译器的模拟调试查看就能看到LCALL的不同了

点评

不行 keill版本5.38 [attachimg]88426[/attachimg]  详情 回复 发表于 2025-3-18 16:44
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-3-18 16:44:24 | 显示全部楼层
王*** 发表于 2025-3-18 16:39
我测试过了,不需要实际执行,只需要让他在那里就行
执行不到也是可以的
我那个写法也可以让LCALL问题消失 ...

还是不行。。。。
截图202503181648324114.jpg
截图202503181648259334.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-3-18 16:50:40 | 显示全部楼层

这样可以
截图202503181650003907.jpg

截图202503181650167711.jpg

点评

你说的对,我也测试发现了这个问题,大概是之前测试的时候有什么变量没控制好 我马上更改这部分的程序 [attachimg]88439[/attachimg] [attachimg]88440[/attachimg]  详情 回复 发表于 2025-3-18 17:20
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-01 06:20:50
已绑定手机

13

主题

1257

回帖

2971

积分

金牌会员

积分
2971
发表于 2025-3-18 16:51:50 | 显示全部楼层
erci*** 发表于 2025-3-18 16:44
还是不行。。。。
这里的参数加上看看呢
  • #define main(x) main(x){_m();while(1);sprintf(0, "0");}; void _m(x)

点评

你对这段代码理解有误~宏定义里面不需要传x 宏只是替换功能,这个宏替换过去是这样的: 原文: [attachimg]88441[/attachimg] 替换后: [attachimg]88442[/attachimg]  详情 回复 发表于 2025-3-18 17:21
额哪里不对,换了个名称  发表于 2025-3-18 16:58
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2218

回帖

5450

积分

版主

积分
5450
发表于 2025-3-18 17:20:28 | 显示全部楼层

你说的对,我也测试发现了这个问题,大概是之前测试的时候有什么变量没控制好
我马上更改这部分的程序



截图202503181719578695.jpg
截图202503181720046104.jpg

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-1 20:16 , Processed in 0.171827 second(s), 117 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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