winderall
驱动牛犊
驱动牛犊
  • 注册日期2004-12-04
  • 最后登录2007-01-15
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1030回复:1

请教ARM系统在ADS环境下开发D12的一个小问题

楼主#
更多 发布于:2004-12-23 20:02
我在ADS下用 const定义D12的设备描述符,配置描述符,接口描述符(以上几个描述符我都是定义为一个结构),发现用sizeof(运算符结构名)得到的值,有点不对劲,一般会多一个字节,通过查看汇编代码,发现是编译器自动给这些结构边界对齐了。 通过查看ADS的使用手册,发现手册上就是这么说的,我也就认了。

但是这样,USB枚举居然也能通过,但通过USBView查看各个端口的设置,发现端口设置值都错了,通过再次查看汇编代码,发现sizeof(接口描述符)=9,但是接口描述符还是边界对齐了,也就是说它占用了10个字节的空间。 而sizeof(配置描述符)=10是对的,因为配置描述符就是在ro区占用了10个字节的空间。 但是,接口描述符和配置描述符的大小都是9个字节,为什么一个是10,一个9。 要不全边界对齐,要不全不对齐,这点我百思不得其解,最后没办法,我给接口描述符的bLength字段加了1,这样枚举到时正常通过了,各个端口的设置也全对了。

可是,虽然这样做目前弄没有什么问题,但是我还是害怕以后会出问题,因为我不知道这中间到底是怎么回事。  为什么sizeof会出现这些问题? 还有是否可以在编译器里面设置,使得const常量不边界对齐,而只是指令对齐呢? 请高手指教。
dxyldl
驱动老牛
驱动老牛
  • 注册日期2004-11-17
  • 最后登录2008-07-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-04 13:46
期待ING~~~~~
游客

返回顶部