你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

USB OTG定义描述符数组对齐疑问

[复制链接]
huahuahnu 提问时间:2023-7-13 09:29 / 未解决
__ALIGN_BEGIN static uint8_t USBD_HID_Desc[USB_HID_DESC_SIZ] __ALIGN_END =
{
  /* 18 */
  0x09,                                               /* bLength: HID Descriptor size */
  HID_DESCRIPTOR_TYPE,                                /* bDescriptorType: HID */
  0x11,                                               /* bcdHID: HID Class Spec release number */
  0x01,
  0x00,                                               /* bCountryCode: Hardware target country */
  0x01,                                               /* bNumDescriptors: Number of HID class descriptors to follow */
  0x22,                                               /* bDescriptorType */
  HID_MOUSE_REPORT_DESC_SIZE,                         /* wItemLength: Total length of Report descriptor */
  0x00,
};

查看__ALIGN_BEGIN定义是在ARM,GNUC编译环境下是4字节对齐,但在IAR下不用对齐,为什么?
收藏 评论5 发布时间:2023-7-13 09:29

举报

5个回答
xmshao 回答时间:2023-7-13 10:27:35
你误会了。


不是IAR环境下就要这个对齐,只是换了个写法而已。


在IAR里面使用的#pragma 语句来指定对齐方式的。
xmshao 回答时间:2023-7-13 10:32:35
你误会了。

不是IAR环境下不要这个对齐,只是换了个写法而已。

在IAR里面使用的#pragma 语句来指定对齐方式的。
huahuahnu 回答时间:2023-7-13 13:24:38
xmshao 发表于 2023-7-13 10:27
你误会了。


跳到这个关键字定义的地方确实没有对IAR下进行对齐,usb_hid.c文件你可以看一下
xmshao 回答时间:2023-7-13 16:52:35
如果需要对齐而在IAR环境下没有相应#pragma语句指定对齐方式时,


不妨自己加上  #pragma data_alignment=4 来满足USB DMA传输时字对齐。


以这里的USB应用为例,库函数里有专门提醒:


Macro to get variable aligned on 4-bytes, for __ICCARM__ the directive "#pragma data_alignment=4" must be used instead.
huahuahnu 回答时间:2023-7-14 16:31:12
xmshao 发表于 2023-7-13 16:52
如果需要对齐而在IAR环境下没有相应#pragma语句指定对齐方式时,

嗯,我知道IAR下对齐要加这个关键字,我拷贝的这个定义是ST提供的USB Middlewares里的固件,这算不算是个bug 了?
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版