乘风飞扬
发表于 2024-7-9 17:19:16
tzz1983 发表于 2024-7-9 10:45
收到, 谢谢, 确实是!
应该是链接定位器出问题了, 把?C?SIDIV的地址放在了 0X0000???
是不是使用了“REMOVEUNUSED”?是的话删了试试。
Kiel C251编译器使用“REMOVEUNUSED”有可能出现这种情况。
大明狐
发表于 2024-7-9 18:16:36
乘风飞扬 发表于 2024-7-9 17:19
是不是使用了“REMOVEUNUSED”?是的话删了试试。
Kiel C251编译器使用“REMOVEUNUSED”有可能出现这种情 ...
果然!!!!!!!
把“REMOVEUNUSED”去掉再编译就正常了!
大佬威武!
大明狐
发表于 2024-7-9 18:29:48
今天还尝试了
y += ( fontsize / 8 ) & 0xFF;
y += ( fontsize / 8 ) & 0x00FF;
y += ( fontsize / 8 ) + 0;
{:5_314:}
跟前面那些结果正常的写法效果一样,只要不是单独的 “ y+= fontsize / 8”,
随便挂上点儿有用没用的零碎儿,结果就是正常的。。。
不过去掉“REMOVEUNUSED”的办法确实一劳永逸,只不过程序体积大了不少
因为屏幕驱动里有好多画画函数
加上“REMOVEUNUSED”
Program Size: data=8.3 edata+hdata=287 xdata=1216 const=39 code=19978
去掉“REMOVEUNUSED”
Program Size: data=8.3 edata+hdata=287 xdata=1216 const=39 code=26610
神农鼎
发表于 2024-7-9 19:52:38
code=26610
===离 64K 还有段距离,今年 STC32G96K256 也会出来的
社区闲人
发表于 2024-7-11 13:16:46
是C251编译器的bug, 与器件无关!!!!!
y += fontsize / 8 ;
286:
0xFF3E96 7E240008 MOV WR4,#Setup(0x0008)
0xFF3E9A 120000 LCALL C?STARTUP(C:0x0000)--->直接重启
0xFF3E9D 2CF7 ADD R15,R7
改为:
y += fontsize >> 3 ;
286:
0xFF3E96 7CBC MOV R11,R12
0xFF3E98 C4 SWAP A
0xFF3E99 23 RL A
0xFF3E9A 541F ANL A,#0x1F
0xFF3E9C 2CFB ADD R15,R11
一切正常!!!
去除REMOVEUNUSED:
y += fontsize / 8 ;
286:
0xFF47F6 7E240008 MOV WR4,#Setup(0x0008)
0xFF47FA 123FBD LCALL C?SIDIV(C:0x3FBD)--->直接调用除法函数
0xFF47FD 2CF7 ADD R15,R7
C?SIDIV:
0xFF3FBD C2D5 CLR F0(0xD0.5)
0xFF3FBF 7CB4 MOV R11,R4
0xFF3FC1 30E708 JNB 0xE0.7,C:0x3FCC
0xFF3FC4 B2D5 CPL F0(0xD0.5)
0xFF3FC6 6E24FFFF XRL WR4,#0xFFFF
0xFF3FCA 0B24 INC WR4,#0x01
0xFF3FCC 7CB6 MOV R11,R6
0xFF3FCE 30E712 JNB 0xE0.7,C:0x3FE3
0xFF3FD1 B2D5 CPL F0(0xD0.5)
0xFF3FD3 6E34FFFF XRL WR6,#0xFFFF
0xFF3FD7 0B34 INC WR6,#0x01
0xFF3FD9 8D32 DIV WR6,WR4
0xFF3FDB 6E24FFFF XRL WR4,#0xFFFF
0xFF3FDF 0B24 INC WR4,#0x01
0xFF3FE1 8002 SJMP C:0x3FE5
0xFF3FE3 8D32 DIV WR6,WR4
0xFF3FE5 30D506 JNB F0(0xD0.5),C:0x3FEE
0xFF3FE8 6E34FFFF XRL WR6,#0xFFFF
0xFF3FEC 0B34 INC WR6,#0x01
0xFF3FEE 22 RET
去除REMOVEUNUSED后,代码量增加,运行效率低。
还是要使用 REMOVEUNUSED,在代码中少用除法:
y += fontsize >> 3 ;
大明狐
发表于 2024-7-11 18:04:35
社区闲人 发表于 2024-7-11 13:16
是C251编译器的bug, 与器件无关!!!!!
收到!!!辛苦啦~~~{:5_315:}
大明狐
发表于 2024-7-12 15:00:42
本帖最后由 大明狐 于 2024-7-13 12:21 编辑
社区闲人 发表于 2024-7-11 13:16
是C251编译器的bug, 与器件无关!!!!!
这个问题发现新情况了{:5_357:}
前面那一版会出问题的程序,实现USB不停电下载,
是引用 USB-HID(查询模式)的USB库 里的 stc_usb_hid_32.LIB 的方式
今天试着重新弄了两个版本
一个是不带USB-HID的版本(模拟SPI和硬件SPI结果一样,所以放一个)
另一个是不用stc_usb_hid_32.LIB库文件的那个USB不停电下载的版本
===============================================
在这两个版本里,写成 y += fontsize/8; 和 添加“REMOVEUNUSED”, 都能运行,没有重启的问题出现
179
补充:32位的USB-CDC的LIB文件,如果加上REMOVEUNUSED,也会不正常。
所以猜测问题应该还是在库文件 LIB 和 C251编译器之间{:5_335:}
zxcv1973
发表于 2024-7-12 17:31:47
大明狐 发表于 2024-7-12 15:00
这个问题发现新情况了
前面那一版会出问题的程序,实现USB不停电下载,
确实,估计是库文件影响了REMOVEUNUSED功能
机灵小老鼠
发表于 2024-7-14 14:30:13
学习了。 从逻辑分析上讲,C251编译器应该不会出现 简单除法 都会出现问题的。
_奶咖君_
发表于 2024-7-14 14:42:23
机灵小老鼠 发表于 2024-7-14 14:30
学习了。 从逻辑分析上讲,C251编译器应该不会出现 简单除法 都会出现问题的。 ...
逻辑 == 自认为{:4_165:}