阅读:1103回复:2
d12固件编程与驱动开发中smart board程序的一个问题
小弟最近有一个问题弄不明白:是关于D12的smart board的固件中有一个指针的。现在提出来,请各位大侠解答!谢谢。
在程序里面,设备的所有描述符是放在code区域里面的,例如下面的: code USB_DEVICE_DESCRIPTOR DeviceDescr= { 12,01,.... } 这样,DeviceDescr是应该定义在了程序区里面。 但是在程序:void code_transmit(unsigned char code *pData,unsigned short len)里面,参数用的是unsigned char code 类型的指针。这个程序里面包含了一个D12_WriteEndpoint()程序, 但是在D12_WriteEndpoint(unsigned char endp,unsinged char len,unsigned char * buf)程序里面,参数用的是unsigned char * buf, 我想问一下,在使用的时候,例如传送DeviceDescr数据的时候: 调用:code_transmit(&DeviceDescr,10),然后在程序里面是D12_WriteEndpoint(),两个指针的类型都不一样,怎么去使用同一个指针呢? |
|
沙发#
发布于:2005-03-17 10:35
void code_transmit(unsigned char code * pRomData, unsigned short len)
{ ControlData.wCount = 0; if(ControlData.wLength > len) { ControlData.wLength = len; } ControlData.pData = pRomData; if( ControlData.wLength >= EP0_PACKET_SIZE) { // 如果发送代码大于包长度 D12_WriteEndpoint(1, EP0_PACKET_SIZE, ControlData.pData); ControlData.wCount += EP0_PACKET_SIZE; DISABLE; bEPPflags.bits.control_state = USB_TRANSMIT; ENABLE; } else { //发送代码小于包长度 D12_WriteEndpoint(1, ControlData.wLength, pRomData); ControlData.wCount += ControlData.wLength; DISABLE; bEPPflags.bits.control_state = USB_IDLE; ENABLE; } } |
|
板凳#
发布于:2005-03-17 10:36
unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char len, unsigned char * buf)
{ unsigned char i; if(bEPPflags.bits.in_isr == 0) { DISABLE; } //--------------------- outportcmd(endp); //选择端点 inportb(); //读入满/空状态 outportcmd(0xF0); //写缓冲区命令 outportdata(0); outportdata(len); for(i=0; i<len; i++) { outportdata(*(buf+i)); } outportcmd(0xFA); //驶购冲区有效 //-------------------------------- if(bEPPflags.bits.in_isr == 0) { ENABLE; } return len; } |
|