乘风飞扬 发表于 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:}
页: 1 [2] 3
查看完整版本: [新问题在17楼]好像找到32位模式下除法引起重启问题的点了,确实跟芯片无关