使用了d12软件包,改成前后台系统. 由于原来的系统是采用汇编写的,调用D12软件包的时候,函数指针数组(标准设备请求)编译连接以后地址一直错误,导致程序无法运行. 最后没办法只好用IF() ELSE () 语句完成,工作正常. 奇怪的是用SWITCH CASE也不正常.
req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK; if (type == USB_STANDARD_REQUEST) //(*StandardDeviceRequest[req])(); //标准请求处理 //使用汇编模板一直不通过,主要是函数指针数组的值一直不对,采用以下方法实现.
{ if (req==0) get_status(); if (req==1) clear_feature(); if (req==2) reserved(); if (req==3) set_feature(); if (req==4) reserved(); if (req==5) set_address(); if (req==6) get_descriptor(); if (req==7) reserved(); if (req==8) get_configuration(); if (req==9) set_configuration(); if (req==10) get_interface(); if (req==11) set_interface(); if (req==12) reserved(); if (req==13) reserved(); if (req==14) reserved(); if (req==15) reserved();
/* switch (req) { case 0 : get_status(); case 1 : clear_feature(); case 3 : set_feature(); case 5 : set_address(); case 6 : get_descriptor(); case 8 : get_configuration(); case 9 : set_configuration(); case 10: get_interface(); case 11: set_interface(); default: reserved(); } */ //采用SWITCH不通过,没发现为什么,暂时使用IF语句.
请高手有空帮我分析一下...
|