在线时间2 小时
UID2066999
注册时间2014-9-5
NXP金币0
该用户从未签到
新手上路

- 积分
- 17
- 最后登录
- 2014-12-29
|
本帖最后由 FSL_TICS_ZJJ 于 2014-10-11 09:13 编辑
环境:IAR, MQX4.1, USB host CDC,CPU K60
CDC串口安装后,用write和fread分别调用的是_io_cdc_serial_read和_io_cdc_serial_write,
以_io_cdc_serial_read为例,有一下语句:
MQX_FILE_PTR fd_ptr,
CLASS_CALL_STRUCT_PTR data_instance;
USB_DATA_CLASS_INTF_STRUCT_PTR if_ptr;
usb_hostdev_tr_init(&tr, (tr_callback) usb_class_cdc_in_data_callback, (void *) data_instance);
上句实际上是将CLASS_CALL_STRUCT_PTR data_instance作为para传递给usb_class_cdc_in_data_callback,
而实际上,在usb_class_cdc_in_data_callback函数中,实际上void *para是作为MQX_FILE_PTR使用的,部分语句如下:
MQX_FILE_PTR fd_ptr = (MQX_FILE_PTR) param;
CLASS_CALL_STRUCT_PTR data_instance = (CLASS_CALL_STRUCT_PTR) fd_ptr->DEV_PTR->DRIVER_INIT_PTR;
if_ptr = (USB_DATA_CLASS_INTF_STRUCT_PTR) data_instance->class_intf_handle;
acm_instance = if_ptr->BOUND_CONTROL_INTERFACE;
运行到上面这句明显就出错了,然后我将_io_cdc_serial_read中的usb_hostdev_tr_init初始化改为:
usb_hostdev_tr_init(&tr, (tr_callback) usb_class_cdc_in_data_callback, (void *) fd_ptr);
将MQX_FILE_PTR fd_ptr作为para传递给usb_class_cdc_in_data_callback,运行正常。
同样的,_io_cdc_serial_write里也有这个现象。
接触K60和MQX没几天,新手,请问:是不是使用函数的时候有什么没注意到或者错误的?
调用语句如下:
num_written = fwrite(send_buf0, 1, 3, s_f_usb_info[G3_MODULE_CDC_USB2_AT_DATA_UART_NUM].f_usb);
num_read = fread(g_usb_cdc_read_buffer, 1, 64, s_f_usb_info[G3_MODULE_CDC_USB2_AT_DATA_UART_NUM].f_usb);
|
|