我确认了下,问题与串口打印信息有关
1. 先初始化usb vcom,然后将finsh设备设置为vcom,在pc端打开虚拟串口设备失败,usb必然卡死,这里的usb卡死与pc端打开虚拟串口无关,不打开也卡死;
2. 先初始化vcom,然后在pc端打开虚拟串口设备,再将finsh设备设置为vcom,这是虚拟串口通信正常,usb不会出现卡死现象;
我这边使用的测试代码如下:
void usb_init()
{
#ifdef RT_USING_USB_DEVICE
/* usb device controller driver initilize */
rt_hw_usbd_init();
rt_usb_device_init("usbd");
rt_usb_vcom_init();
#endif
}
void set_finsh_dev(char *device)
{
#ifdef RT_USING_CONSOLE
rt_console_set_device(device);
finsh_set_device( device );
#endif
}
#include "finsh.h"
FINSH_FUNCTION_EXPORT(usb_init, init usb device);
FINSH_FUNCTION_EXPORT(set_finsh_dev, set finsh device);
上面两个程序的执行顺序:
1. usb_init() ——》set_finsh_dev(“vcom”) ——》usb卡死
2. usb_init() ——》PC端打开虚拟设备,这里为ttyACM0 ——》set_finsh_dev(“vcom”) ——》PC端能够正常显示finsh的调试信息,usb通信正常
这里有个奇怪的问题是windows上并没有这样的问题,这个问题出在哪里呢,请大家帮忙分析看看。