完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
关于这个usb_qtd_init(),用于给qtd结构体初始化,其中函数形参data_ptr指向一个数组,长度只有256,p_qtd->buffer[0]储存的地址是data_ptr,p_qtd->buffer[1]到p_qtd->buffer[4] 储存的地址依次在p_qtd->buffer[0]基础上加上n个4096,这样会不会造成p_qtd->buffer指向了意料之外的地址?造成内存错误?
/* Initialize qtd */ static void usb_qtd_init(dcd_qtd_t *p_qtd, void *data_ptr, uint16_t total_bytes) { memset(p_qtd, 0, sizeof(dcd_qtd_t)); p_qtd->next = USB_SOC_DCD_QTD_NEXT_INVALID; //下一个qtd数组索引号 p_qtd->active = 1; p_qtd->total_bytes = p_qtd->expected_bytes = total_bytes; if (data_ptr != NULL) { p_qtd->buffer[0] = (uint32_t)data_ptr; //USB_SOC_DCD_QHD_BUFFER_COUNT=5 for (uint8_t i = 1; i < USB_SOC_DCD_QHD_BUFFER_COUNT; i++) { p_qtd->buffer[i] |= ((p_qtd->buffer[i-1]) & 0xFFFFF000UL) + 4096U; //地址都是2KB对齐 } } } |
|
相关推荐
1个回答
|
|
|
只要长度配置正确就不会导致错误,usb只会从起始地址开始,访问p_qtd->total_bytes个数据, 不会访问超过配置长度的内存空间。
准备5个buffer地址,实际是给带MMU的系统准备的,每个buffer对应4KB物理空间(一个page),两个page之间可以物理地址不连续。 不过mcu里面不大会用不连续的地址,所以就简单的每个buffer加4k了 |
|
|
|
|
只有小组成员才能发言,加入小组>>
457个成员聚集在这个小组
加入小组1413 浏览 0 评论
HPM5E00EVK,ecat_io例程,卡在DisableSyncManChannel函数
1105 浏览 1 评论
1870 浏览 2 评论
1286 浏览 1 评论
HPM monitor studio 只能在 hpm芯片+hpm_sdk 的组合下才能用吗?
1670 浏览 0 评论
5859浏览 22评论
2707浏览 4评论
自己做的hpm5321和6750板子怎么都没有1.1的输出呢?
2732浏览 4评论
编译错误: error: unrecognizable insn,不知道原因,请教!
932浏览 4评论
1831浏览 3评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 14:21 , Processed in 1.180308 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1105
