[ZLG-ARM] 关于USB编程_函数指针数组(标准设备请求)

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

本版积分规则

6

主题

7

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部