完善资料让更多小伙伴认识你,还能领取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了 |
|
|
|
只有小组成员才能发言,加入小组>>
397个成员聚集在这个小组
加入小组自己做的hpm5321和6750板子怎么都没有1.1的输出呢?
986 浏览 1 评论
关于hpm6364的femc同时使用外接sdram和sram的问题
834 浏览 1 评论
795 浏览 0 评论
708 浏览 1 评论
808 浏览 0 评论
【盖楼抢好礼】欢迎先楫半导体HPMicro入驻电子发烧友社区!
24560浏览 532评论
2570浏览 22评论
USBX范例中启用 double FPU , 运行异常,卡死在tx_risc_v_trap_handler函数
2926浏览 5评论
1741浏览 5评论
请问Segger Embedded Studio这个窗口不小心拉出来悬浮后怎么塞回去?
2896浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 01:05 , Processed in 0.569685 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号