找回密码
 立即注册
楼主: lz***

【已解决】SDCC移植USB例程后不能正常枚举(是字节序的问题)

[复制链接]
  • TA的每日心情
    慵懒
    2024-4-13 22:07
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    5

    主题

    16

    回帖

    25

    积分

    新手上路

    积分
    25
     楼主| 发表于 2024-3-21 09:49:38 | 显示全部楼层
    【现象复盘】
    考虑到描述符已经写成了代码中的常量,USB枚举过程中实际上只有一些长度字段是多字节的。
    长度字节颠倒后相当于向主机报告想要发送长达10000字节的描述符,主机显然不支持。
    Linux直接报错-75,这个错误代码在 /usr/src/linux-headers-6.1.0-1035-oem/include/uapi/asm-generic/errno.h 定义:
    #define EOVERFLOW       75      /* Value too large for defined data type */

    就是说溢出了,枚举失败(逻辑分析上看大概尝试了3次,io共26个请求)。
    Windows似乎更宽容一些,虽然不太对但是还是接受了描述符,可能是因为第一次发包时本来就不知道端口大小。
    所以从抓包上看,只接收了第一个描述符,实际上后几个描述符都发送并接收了,但是不正确被忽略了(逻辑分析上看大概尝试了2次,io共20个请求)。

    所以移植的每一个程序都会在同样的地方出错,现象一致。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2 小时前
  • 签到天数: 65 天

    [LV.6]常住居民II

    3

    主题

    570

    回帖

    804

    积分

    高级会员

    积分
    804
    发表于 2024-3-21 10:35:54 来自手机 | 显示全部楼层
    还以为sdcc和keil只有几条指令和配置不一样原理还有这个差别啊
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 10:09
  • 签到天数: 124 天

    [LV.7]常住居民III

    7

    主题

    77

    回帖

    1045

    积分

    金牌会员

    机长

    积分
    1045
    发表于 2024-4-9 16:22:46 | 显示全部楼层
    lzyor 发表于 2024-3-19 16:34
    破案了,Keil是大端序,SDCC是小端序;
    USB包是小端序,例程代码全都是为Keil写的,
    对字节序全部做了转换 ...

    这个地方最容易坑人了
    业余撸代码,专业开飞机
    回复 支持 1 反对 0 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-9 08:49 , Processed in 0.055923 second(s), 36 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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