大明狐 发表于 2024-7-15 13:06:37

C251的USB和REMOVEUNUSED真是鱼与熊掌

本帖最后由 大明狐 于 2024-7-15 13:09 编辑

自从上周发现用C251编译带USB的LIB库文件的程序的时候
(只要包含HID或者CDC的LIB的)

如果Misc control设置的是“REMOVEUNUSED”

遇到除以8除以4之类除法运算的语句时
会莫名其妙多出一些复位指令
造成单片机重启
使用移位的方法代替除号运算,可以解决这个问题

然后今天又发现取负数的语句也会产生重启指令
num是float型,这下不知道该怎么改了


{:5_337:}
=====================================
只要不用LIB库文件,或者去掉“REMOVEUNUSED”
这些情况就不会发生

鱼与熊掌不可兼得,
现在只能要么暂时放弃USB自动下载,还是用手动连接HID;
要么暂时放弃“REMOVEUNUSED”,尽量控制程序大小。

不过反正8051的内存也够折腾,暂时选后者{:5_316:}









jwd 发表于 2024-7-15 14:20:02

你这是踩了一个又一个坑啊

tzz1983 发表于 2024-7-15 14:23:41

你别加LIB,加入C源码, 试试?
各大实验箱都有源码,不满意的地方还可以自己改

大明狐 发表于 2024-7-15 15:20:48

tzz1983 发表于 2024-7-15 14:23
你别加LIB,加入C源码, 试试?
各大实验箱都有源码,不满意的地方还可以自己改 ...

上个贴子里最后就用了不用LIB的那种。
但是资源下载立的USB库里只有LIB的。

soma 发表于 2024-7-15 15:38:34

要是能开源就好了,不用那么麻烦

tzz1983 发表于 2024-7-15 16:23:27

本帖最后由 tzz1983 于 2024-7-15 16:36 编辑

大明狐 发表于 2024-7-15 15:20
上个贴子里最后就用了不用LIB的那种。
但是资源下载立的USB库里只有LIB的。 ...
有开源代码的,






这个是以源码形式呈现的: https://www.stcai.com/syx

读懂以后,可能需要自己稍加修饰,

我没有用过HID调试, 但是我知道,
如果把USB-CDC的源码改为PC与MCU之间的通信是很容易的,
就是MCU收到USB数据后, 不需要真的从UARTx发出, 就是直接利用(截胡{:lol:})


DebugLab 发表于 2024-7-15 17:17:52

库函数就是lib,试试直接操作寄存器
还有这个问题也要注意一下:


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




大明狐 发表于 2024-7-15 18:20:56

tzz1983 发表于 2024-7-15 16:23
有开源代码的,




上个贴子里最后用的就是这个,还是很早之前用过的,一直都很正常。

最近在试用LIB的方式,才发现的 会和C251Keil闹别扭的问题。

机灵小老鼠 发表于 2024-7-15 23:11:53

难不成还是生成库的时候控制操作 和 REMOVEUNUSED 之间还有不一致的地方?如果有库的源码,那大家多试试就能判断出来了, 可惜STC的库不开源;
实际上,反过来想,上面使用 69-HID... 例程 在C251相同设置下编译,如果不产生 楼主遇到的 异常编译 的问题,也已经说明问题所在了吧? 楼主你觉得呢

大明狐 发表于 2024-7-16 09:00:03

机灵小老鼠 发表于 2024-7-15 23:11
难不成还是生成库的时候控制操作 和 REMOVEUNUSED 之间还有不一致的地方?如果有库的源码,那大家多试试就 ...

就是这个意思啊,所以记录一下,以后好避坑
页: [1] 2
查看完整版本: C251的USB和REMOVEUNUSED真是鱼与熊掌