阅读:1028回复:1
请教ARM系统在ADS环境下开发D12的一个小问题
我在ADS下用 const定义D12的设备描述符,配置描述符,接口描述符(以上几个描述符我都是定义为一个结构),发现用sizeof(运算符结构名)得到的值,有点不对劲,一般会多一个字节,通过查看汇编代码,发现是编译器自动给这些结构边界对齐了。 通过查看ADS的使用手册,发现手册上就是这么说的,我也就认了。
但是这样,USB枚举居然也能通过,但通过USBView查看各个端口的设置,发现端口设置值都错了,通过再次查看汇编代码,发现sizeof(接口描述符)=9,但是接口描述符还是边界对齐了,也就是说它占用了10个字节的空间。 而sizeof(配置描述符)=10是对的,因为配置描述符就是在ro区占用了10个字节的空间。 但是,接口描述符和配置描述符的大小都是9个字节,为什么一个是10,一个9。 要不全边界对齐,要不全不对齐,这点我百思不得其解,最后没办法,我给接口描述符的bLength字段加了1,这样枚举到时正常通过了,各个端口的设置也全对了。 可是,虽然这样做目前弄没有什么问题,但是我还是害怕以后会出问题,因为我不知道这中间到底是怎么回事。 为什么sizeof会出现这些问题? 还有是否可以在编译器里面设置,使得const常量不边界对齐,而只是指令对齐呢? 请高手指教。 |
|
沙发#
发布于:2005-01-04 13:46
期待ING~~~~~
|
|