Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
USB
usb复合设备
USB复合设备问题 CDC+MSTORAGE
发布于 2020-05-28 09:18:47 浏览:3393
订阅该版
如题,各位大神,本人使用USB,想用USB既当控制台打印,也可以充当U盘(板子上带了一块W25Q64的SPIFLASH芯片),当分别使用USB当CDC和MSTORAGE时,均能使用。但是当复合使用,便出现windows无法识别。下面详细说明问题: 1.单独CDC,当控制台打印使用 rt_config配置如下 ```c #define RT_USING_USB_DEVICE #define RT_USBD_THREAD_STACK_SZ 4096 #define USB_VENDOR_ID 0x0FFE #define USB_PRODUCT_ID 0x0001 #define _RT_USB_DEVICE_CDC #define RT_USB_DEVICE_CDC #define RT_VCOM_TASK_STK_SIZE 512 #define RT_VCOM_SERNO "32021919830108" #define RT_VCOM_SER_LEN 14 #define RT_VCOM_TX_TIMEOUT 1000 ``` 然后 find vcom设备 并作为控制台设备 就可以用MSH命令了 2.单独使用MSTORAGE时 配置如下 ```c #define RT_USING_USB_DEVICE #define RT_USBD_THREAD_STACK_SZ 4096 #define USB_VENDOR_ID 0x0FFE #define USB_PRODUCT_ID 0x0001 #define _RT_USB_DEVICE_MSTORAGE #define RT_USB_DEVICE_MSTORAGE #define RT_USB_MSTORAGE_DISK_NAME "test" ``` 使用 fal 把SPIFLAH 画出一块分区 “test" 并建立 DFS elm 文件系统 这样Flash分区可以作为U盘一样使用 windous可以识别到 并自由往里面拷贝 文件 3.同时使用 CDC和MSTORAGE时 配置如下 ```c #define RT_USING_USB_DEVICE #define RT_USBD_THREAD_STACK_SZ 4096 #define USB_VENDOR_ID 0x0FFE #define USB_PRODUCT_ID 0x0001 #define RT_USB_DEVICE_COMPOSITE #define RT_USB_DEVICE_CDC #define RT_USB_DEVICE_NONE #define RT_USB_DEVICE_MSTORAGE #define RT_VCOM_TASK_STK_SIZE 512 #define RT_VCOM_SERNO "32021919830108" #define RT_VCOM_SER_LEN 14 #define RT_VCOM_TX_TIMEOUT 1000 #define RT_USB_MSTORAGE_DISK_NAME "test" ``` 就是将上边两个功能整合起来 出了问题 刚开始查看设备管理器 能看到挂载上了 但是控制台不能打印消息 U盘标识也出不来 等一会儿后 WINDOUS提示 无法识别 不知道为什么 分开单独用 就好好地 充当复合设备就出问题 哪位大神用过复合设备,帮忙解决一下问题,在此谢谢了。
查看更多
12
个回答
默认排序
按发布时间排序
来一颗糖
2020-05-28
这家伙很懒,什么也没写!
日志里面有没有打印 `“endpoint assign error” ?` 如果有,可以尝试修改下 `“HAL_Drivers\drv_usbd.c”` 里的 ```c static struct ep_id _ep_pool[] = { {0x0, USB_EP_ATTR_CONTROL, USB_DIR_INOUT, 64, ID_ASSIGNED }, {0x1, USB_EP_ATTR_BULK, USB_DIR_IN, 64, ID_UNASSIGNED}, {0x1, USB_EP_ATTR_BULK, USB_DIR_OUT, 64, ID_UNASSIGNED}, {0x2, USB_EP_ATTR_INT, USB_DIR_IN, 64, ID_UNASSIGNED}, {0x2, USB_EP_ATTR_INT, USB_DIR_OUT, 64, ID_UNASSIGNED}, {0x3, USB_EP_ATTR_BULK, USB_DIR_IN, 64, ID_UNASSIGNED}, #if !defined(SOC_SERIES_STM32F1) {0x3, USB_EP_ATTR_BULK, USB_DIR_OUT, 64, ID_UNASSIGNED}, #endif {0xFF, USB_EP_ATTR_TYPE_MASK, USB_DIR_MASK, 0, ID_ASSIGNED }, }; ``` 可能是 usb 端点没分配好,不够用。 比如改成: ```c static struct ep_id _ep_pool[] = { {0x0, USB_EP_ATTR_CONTROL, USB_DIR_INOUT, 64, ID_ASSIGNED }, {0x1, USB_EP_ATTR_INT, USB_DIR_IN, 64, ID_UNASSIGNED}, {0x1, USB_EP_ATTR_INT, USB_DIR_OUT, 64, ID_UNASSIGNED}, {0x2, USB_EP_ATTR_INT, USB_DIR_IN, 64, ID_UNASSIGNED}, {0x2, USB_EP_ATTR_INT, USB_DIR_OUT, 64, ID_UNASSIGNED}, {0x3, USB_EP_ATTR_BULK, USB_DIR_IN, 64, ID_UNASSIGNED}, #if !defined(SOC_SERIES_STM32F1) {0x3, USB_EP_ATTR_BULK, USB_DIR_OUT, 64, ID_UNASSIGNED}, #endif {0xFF, USB_EP_ATTR_TYPE_MASK, USB_DIR_MASK, 0, ID_ASSIGNED }, }; ```
来一颗糖
2020-05-28
这家伙很懒,什么也没写!
还有就是把 usb 的日志打开吧,可能有助于你调试。 ```c #define RT_DEBUG_USB 0x00 ``` 改成 ```c #define RT_DEBUG_USB 0x01 ```
kkwangkk
2020-05-28
这家伙很懒,什么也没写!
>日志里面有没有打印 “endpoint assign error” ? > >如果有,可以尝试修改下 “HAL_Drivers\drv_usbd.c” ... --- 确实有endpoint assign error 但是按照您的方法 还是有
来一颗糖
2020-05-29
这家伙很懒,什么也没写!
>确实有endpoint assign error 但是按照您的方法 还是有 ```c static struct ep_id _ep_pool[] = { {0x0, USB_EP_ATTR_CONTROL, USB_DIR_INOUT, 64, ID_ASSIGNED }, {0x1, USB_EP_ATTR_INT, USB_DIR_IN, 64, ID_UNASSIGNED}, {0x1, USB_EP_ATTR_INT, USB_DIR_OUT, 64, ID_UNASSIGNED}, {0x2, USB_EP_ATTR_BULK, USB_DIR_IN, 64, ID_UNASSIGNED}, {0x2, USB_EP_ATTR_BULK, USB_DIR_OUT, 64, ID_UNASSIGNED}, {0x3, USB_EP_ATTR_BULK, USB_DIR_IN, 64, ID_UNASSIGNED}, #if !defined(SOC_SERIES_STM32F1) {0x3, USB_EP_ATTR_BULK, USB_DIR_OUT, 64, ID_UNASSIGNED}, #endif {0xFF, USB_EP_ATTR_TYPE_MASK, USB_DIR_MASK, 0, ID_ASSIGNED }, }; ``` 额 感觉就是 usb 底层驱动里的 端点池 不够用了(或者没分配好)? `USB_EP_ATTR_INT;USB_EP_ATTR_BULK` 这两个尝试修改下吧,把 int 改成 bulk 啥的。 CDC 虚拟串口用到了一个 INT(中断传输)两个 BULK (批量传输); 大容量U盘用到了两个 BULK (批量传输);
川北97大叔
2020-05-29
这家伙很懒,什么也没写!
不行就模拟一个usb吧,可以参考《圈圈教你玩usb》~
kkwangkk
2020-05-30
这家伙很懒,什么也没写!
>额 感觉就是 usb 底层驱动里的 端点池 不够用了(或者没分配好)? USB_EP_ATTR_INT;USB_EP_ATTR_BUL ... ```c \ | / - RT - Thread Operating System / | \ 4.0.2 build May 28 2020 2006 - 2019 Copyright by rt-thread team [SFUD] Find a Winbond flash chip. Size is 8388608 bytes. [SFUD] norflash0 flash device is initialize success. [D/FAL] (fal_flash_init:63) Flash device | norflash0 | addr: 0x00000000 | len: 0x00800000 | blk_size: 0x00001000 |initialized finish. [I/FAL] ==================== FAL partition table ==================== [I/FAL] | name | flash_dev | offset | length | [I/FAL] ------------------------------------------------------------- [I/FAL] | easyflash | norflash0 | 0x00000000 | 0x00100000 | [I/FAL] | download | norflash0 | 0x00100000 | 0x00100000 | [I/FAL] | fat | norflash0 | 0x00200000 | 0x00100000 | [I/FAL] ============================================================= [I/FAL] RT-Thread Flash Abstraction Layer (V0.5.0) initialize success. rt_usbd_device_new rt_usbd_config_new rt_usbd_function_new rt_usbd_interface_new rt_usbd_interface_new rt_usbd_altsetting_new rt_usbd_altsetting_new rt_usbd_endpoint_new rt_usbd_altsetting_add_endpoint rt_usbd_interface_add_altsetting rt_usbd_set_altsetting rt_usbd_find_altsetting rt_usbd_function_add_interface rt_usbd_endpoint_new rt_usbd_endpoint_new rt_usbd_altsetting_add_endpoint rt_usbd_altsetting_add_endpoint rt_usbd_interface_add_altsetting rt_usbd_set_altsetting rt_usbd_find_altsetting rt_usbd_function_add_interface rt_usbd_config_add_function rt_usbd_function_new rt_usbd_interface_new rt_usbd_altsetting_new rt_usbd_endpoint_new rt_usbd_endpoint_new rt_usbd_altsetting_add_endpoint rt_usbd_altsetting_add_endpoint rt_usbd_interface_add_altsetting rt_usbd_set_altsetting rt_usbd_find_altsetting rt_usbd_function_add_interface rt_usbd_config_add_function rt_usbd_device_add_config assigned 1 assigned 2 assigned 2 assigned 3 assigned 3 rt_usbd_set_config rt_usbd_find_config [I/FAL] The FAL block device (fat) created successfully mount fat success msh />message type 5 reset 0 message type 0 [ setup_request : 0x80 value : 0x100 length : 0x40 index : 0x0 request : 0x6 ] _get_device_descriptor message type 2 message type 5 reset 0 message type 0 [ setup_request : 0x0 value : 0x11 length : 0x0 index : 0x0 request : 0x5 ] _set_address message type 0 [ setup_request : 0x80 value : 0x100 length : 0x12 index : 0x0 request : 0x6 ] _get_device_descriptor message type 2 message type 0 [ setup_request : 0x80 value : 0x200 length : 0xff index : 0x0 request : 0x6 ] _get_config_descriptor message type 2 message type 0 [ setup_request : 0x80 value : 0x303 length : 0xff index : 0x409 request : 0x6 ] _get_string_descriptor message type 2 message type 0 [ setup_request : 0x80 value : 0x300 length : 0xff index : 0x0 request : 0x6 ] _get_string_descriptor message type 2 message type 0 [ setup_request : 0x80 value : 0x302 length : 0xff index : 0x409 request : 0x6 ] _get_string_descriptor message type 2 message type 0 [ setup_request : 0x80 value : 0x600 length : 0xa index : 0x0 request : 0x6 ] message type 0 [ setup_request : 0x80 value : 0x100 length : 0x12 index : 0x0 request : 0x6 ] _get_device_descriptor message type 2 message type 0 [ setup_request : 0x80 value : 0x200 length : 0x9 index : 0x0 request : 0x6 ] _get_config_descriptor message type 2 message type 0 [ setup_request : 0x80 value : 0x200 length : 0x6a index : 0x0 request : 0x6 ] _get_config_descriptor message type 2 message type 0 [ setup_request : 0x0 value : 0x1 length : 0x0 index : 0x0 request : 0x9 ] _set_config rt_usbd_set_config rt_usbd_find_config cdc function enable Mass storage function enabled disk already open message type 0 [ setup_request : 0x80 value : 0x302 length : 0x4 index : 0x409 request : 0x6 ] _get_string_descriptor message type 2 message type 0 [ setup_request : 0x80 value : 0x302 length : 0x2a index : 0x409 request : 0x6 ] _get_string_descriptor message type 2 message type 0 [ setup_request : 0x80 value : 0x302 length : 0x4 index : 0x409 request : 0x6 ] _get_string_descriptor message type 2 message type 0 [ setup_request : 0x80 value : 0x302 length : 0x2a index : 0x409 request : 0x6 ] _get_string_descriptor message type 2 message type 0 [ setup_request : 0xa1 value : 0x0 length : 0x7 index : 0x0 request : 0x21 ] rt_usbd_find_interface _cdc_get_line_coding message type 2 message type 0 [ setup_request : 0x21 value : 0x0 length : 0x0 index : 0x0 request : 0x22 ] rt_usbd_find_interface vcom state:0 message type 0 [ setup_request : 0x21 value : 0x0 length : 0x7 index : 0x0 request : 0x20 ] rt_usbd_find_interface _cdc_set_line_coding message type 2 _cdc_set_line_coding_callback message type 0 [ setup_request : 0xa1 value : 0x0 length : 0x7 index : 0x0 request : 0x21 ] rt_usbd_find_interface _cdc_get_line_coding message type 2 message type 0 [ setup_request : 0x80 value : 0x300 length : 0x2 index : 0x0 request : 0x6 ] _get_string_descriptor message type 2 message type 0 [ setup_request : 0x80 value : 0x300 length : 0x4 index : 0x0 request : 0x6 ] _get_string_descriptor message type 2 message type 0 [ setup_request : 0x80 value : 0x303 length : 0x2 index : 0x409 request : 0x6 ] _get_string_descriptor message type 2 message type 0 [ setup_request : 0x80 value : 0x303 length : 0x1a index : 0x409 request : 0x6 ] _get_string_descriptor message type 2 message type 0 [ setup_request : 0xa1 value : 0x0 length : 0x1 index : 0x2 request : 0xfe ] rt_usbd_find_interface mstorage_interface_handler USBREQ_GET_MAX_LUN message type 2 message type 1 _ep_out_handler 31 ep_out reside 36 _inquiry_cmd message type 1 _ep_in_handler _send_status message type 1 _ep_in_handler return to cbw status message type 5 reset 7 cdc function disable Mass storage function disabled message type 0 [ setup_request : 0x80 value : 0x100 length : 0x40 index : 0x0 request : 0x6 ] _get_device_descriptor message type 2 message type 5 reset 0 message type 0 [ setup_request : 0x0 value : 0x11 length : 0x0 index : 0x0 request : 0x5 ] _set_address message type 0 [ setup_request : 0x80 value : 0x100 length : 0x12 index : 0x0 request : 0x6 ] _get_device_descriptor message type 2 message type 0 [ setup_request : 0x0 value : 0x1 length : 0x0 index : 0x0 request : 0x9 ] _set_config rt_usbd_set_config rt_usbd_find_config cdc function enable Mass storage function enabled ```
kkwangkk
2020-05-30
这家伙很懒,什么也没写!
>额 感觉就是 usb 底层驱动里的 端点池 不够用了(或者没分配好)? USB_EP_ATTR_INT;USB_EP_ATTR_BUL ... ``` message type 1 _ep_out_handler 31 ep_out reside 36 _inquiry_cmd message type 1 _ep_in_handler _send_status message type 1 _ep_in_handler return to cbw status message type 5 reset 7 cdc function disable Mass storage function disabled message type 0 [ setup_request : 0x80 value : 0x100 length : 0x40 index : 0x0 request : 0x6 ] _get_device_descriptor message type 2 message type 5 reset 0 message type 0 [ setup_request : 0x0 value : 0x11 length : 0x0 index : 0x0 request : 0x5 ] _set_address message type 0 [ setup_request : 0x80 value : 0x100 length : 0x12 index : 0x0 request : 0x6 ] _get_device_descriptor message type 2 message type 0 [ setup_request : 0x0 value : 0x1 length : 0x0 index : 0x0 request : 0x9 ] _set_config rt_usbd_set_config rt_usbd_find_config cdc function enable Mass storage function enabled message type 1 _ep_out_handler 31 ep_out reside 36 _inquiry_cmd message type 1 _ep_in_handler _send_status message type 1 _ep_in_handler return to cbw status message type 5 reset 7 cdc function disable Mass storage function disabled message type 0 [ setup_request : 0x80 value : 0x100 length : 0x40 index : 0x0 request : 0x6 ] _get_device_descriptor message type 2 message type 5 reset 0 message type 0 [ setup_request : 0x0 value : 0x11 length : 0x0 index : 0x0 request : 0x5 ] _set_address message type 0 [ setup_request : 0x80 value : 0x100 length : 0x12 index : 0x0 request : 0x6 ] _get_device_descriptor message type 2 message type 0 [ setup_request : 0x0 value : 0x1 length : 0x0 index : 0x0 request : 0x9 ] _set_config rt_usbd_set_config rt_usbd_find_config cdc function enable Mass storage function enabled message type 1 _ep_out_handler 31 ep_out reside 36 _inquiry_cmd message type 1 _ep_in_handler _send_status message type 1 _ep_in_handler return to cbw status message type 5 reset 7 cdc function disable Mass storage function disabled message type 0 [ setup_request : 0x80 value : 0x100 length : 0x40 index : 0x0 request : 0x6 ] _get_device_descriptor message type 2 message type 5 reset 0 message type 0 [ setup_request : 0x0 value : 0x11 length : 0x0 index : 0x0 request : 0x5 ] _set_address message type 0 [ setup_request : 0x80 value : 0x100 length : 0x12 index : 0x0 request : 0x6 ] _get_device_descriptor message type 2 message type 0 [ setup_request : 0x0 value : 0x1 length : 0x0 index : 0x0 request : 0x9 ] _set_config rt_usbd_set_config rt_usbd_find_config cdc function enable Mass storage function enabled message type 1 _ep_out_handler 31 ep_out reside 36 _inquiry_cmd message type 1 _ep_in_handler _send_status message type 1 _ep_in_handler return to cbw status message type 5 reset 7 cdc function disable Mass storage function disabled message type 0 [ setup_request : 0x80 value : 0x100 length : 0x40 index : 0x0 request : 0x6 ] _get_device_descriptor message type 2 message type 5 reset 0 message type 0 [ setup_request : 0x0 value : 0x11 length : 0x0 index : 0x0 request : 0x5 ] _set_address message type 0 [ setup_request : 0x80 value : 0x100 length : 0x12 index : 0x0 request : 0x6 ] _get_device_descriptor message type 2 message type 0 [ setup_request : 0x0 value : 0x1 length : 0x0 index : 0x0 request : 0x9 ] _set_config rt_usbd_set_config rt_usbd_find_config cdc function enable Mass storage function enabled message type 1 _ep_out_handler 31 ep_out reside 36 _inquiry_cmd message type 1 _ep_in_handler _send_status message type 1 _ep_in_handler return to cbw status message type 5 reset 7 cdc function disable Mass storage function disabled message type 0 [ setup_request : 0x80 value : 0x100 length : 0x40 index : 0x0 request : 0x6 ] _get_device_descriptor message type 2 message type 5 reset 0 message type 0 [ setup_request : 0x0 value : 0x11 length : 0x0 index : 0x0 request : 0x5 ] _set_address message type 0 [ setup_request : 0x80 value : 0x100 length : 0x12 index : 0x0 request : 0x6 ] _get_device_descriptor message type 2 message type 0 [ setup_request : 0x0 value : 0x1 length : 0x0 index : 0x0 request : 0x9 ] _set_config rt_usbd_set_config rt_usbd_find_config cdc function enable Mass storage function enabled ``` 这是它打印的日志 打印到这里就停了 不再打印了 设备管理器显示 USB串行设备 但是不能收发数据 另外也没有U盘标识
kkwangkk
2020-05-30
这家伙很懒,什么也没写!
>额 感觉就是 usb 底层驱动里的 端点池 不够用了(或者没分配好)? USB_EP_ATTR_INT;USB_EP_ATTR_BUL ... ```c static struct ep_id _ep_pool[] = { {0x0, USB_EP_ATTR_CONTROL, USB_DIR_INOUT, 64, ID_ASSIGNED }, {0x1, USB_EP_ATTR_INT, USB_DIR_IN, 64, ID_UNASSIGNED}, {0x1, USB_EP_ATTR_INT, USB_DIR_OUT, 64, ID_UNASSIGNED}, {0x2, USB_EP_ATTR_BULK, USB_DIR_IN, 64, ID_UNASSIGNED}, {0x2, USB_EP_ATTR_BULK, USB_DIR_OUT, 64, ID_UNASSIGNED}, {0x3, USB_EP_ATTR_BULK, USB_DIR_IN, 64, ID_UNASSIGNED}, #if !defined(SOC_SERIES_STM32F1) {0x3, USB_EP_ATTR_BULK, USB_DIR_OUT, 64, ID_UNASSIGNED}, {0x4, USB_EP_ATTR_BULK, USB_DIR_IN, 64, ID_UNASSIGNED}, {0x4, USB_EP_ATTR_BULK, USB_DIR_OUT, 64, ID_UNASSIGNED}, {0x5, USB_EP_ATTR_BULK, USB_DIR_IN, 64, ID_UNASSIGNED}, {0x5, USB_EP_ATTR_BULK, USB_DIR_OUT, 64, ID_UNASSIGNED}, #endif {0xFF, USB_EP_ATTR_TYPE_MASK, USB_DIR_MASK, 0, ID_ASSIGNED }, }; ``` 我把`ep_pool` 改成这样了
kkwangkk
2020-05-30
这家伙很懒,什么也没写!
>额 感觉就是 usb 底层驱动里的 端点池 不够用了(或者没分配好)? >USB_EP_ATTR_INT;USB_EP_ATTR_BUL ... --- 每次都会跳出来这个 刚开是设备管理器显示 串行COM口 显示这个后 设备管理器的显示也消失了 你看下日志打印
来一颗糖
2020-06-01
这家伙很懒,什么也没写!
>每次都会跳出来这个 刚开是设备管理器显示 串行COM口 显示这个后 设备管理器的显示也消失了 你看下日 ... 额 USB 相关的,这段时间我正在学习入门中,也不是很清楚为啥。 看你的日志: ``` assigned 1 assigned 2 assigned 2 assigned 3 assigned 3 ``` 这5个端点应该都分配好了。
撰写答案
登录
注册新账号
关注者
0
被浏览
3.4k
关于作者
kkwangkk
这家伙很懒,什么也没写!
提问
2
回答
16
被采纳
0
关注TA
发私信
相关问题
1
请教USB Host
2
STM32F4调试USB 读卡器(Slave)提示格式化
3
急求 STM32F4 USB Device MSC+SD 的相关问题
4
USB 框架问题
5
USB键盘
6
LPC17xx 如何添加USB HOST设备
7
RT-Thread目前支持USB HOST了吗?
8
USB HOST的支持问题
9
RTT 2.0.1 USB存储设备问题,枚举到USBREQ_GET_MAX_LUN后复位
10
USB库已经很久没更新了
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
如何在master上的BSP中添加配置yml文件
2
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
3
RT-Thread 发布 EtherKit开源以太网硬件!
4
rt-thread使用cherryusb实现虚拟串口
5
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
14
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部