完善资料让更多小伙伴认识你,还能领取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了 |
|
|
|
只有小组成员才能发言,加入小组>>
379个成员聚集在这个小组
加入小组470 浏览 1 评论
580 浏览 0 评论
先楫HPM6E00技术日 | 百人研讨共话工业应用创新及发展趋势
796 浏览 0 评论
826 浏览 0 评论
2044 浏览 22 评论
【盖楼抢好礼】欢迎先楫半导体HPMicro入驻电子发烧友社区!
22135浏览 532评论
2053浏览 22评论
USBX范例中启用 double FPU , 运行异常,卡死在tx_risc_v_trap_handler函数
2790浏览 5评论
1582浏览 5评论
请问Segger Embedded Studio这个窗口不小心拉出来悬浮后怎么塞回去?
2689浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 10:27 , Processed in 1.043674 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号