本帖最后由 hceng 于 2013-12-1 17:18 编辑  
 
这是Keil给出的警告 
Build target 'Target 1' 
assembling STARTUP.A51... 
compiling Key.c... 
compiling PDIUSBD12.c... 
compiling UART.c... 
compiling System.c... 
compiling UsbCorde.c... 
linking... 
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS 
    SEGMENT: ?PR?_PRINTLONGINT?UART 
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS 
    SEGMENT: ?PR?_PRINTHEX?UART 
Program Size: data=60.0 xdata=0 code=2445 
creating hex file from "UsbMouse"... 
"UsbMouse" - 0 Error(s), 2 Warning(s). 
UART.h文件 
#ifndef __UART_H__ 
#define __UART_H__ 
#include "MyType.h" 
 
void InitUART(void); 
void UartPutChar(uchar8); 
void Prints(uchar8 *pd); 
void PrintLongInt(uint32); 
void PrintShortIntHex(uint16 x); 
//void PrintLongIntHex(uint32); 
void Printc(uchar8); 
void PrintHex(uchar8 x); 
 
#endif 
 
UART.c文件 
 
#include <AT89x52.H> 
#include "UART.h" 
#include "MyType.h" 
#include "config.h" 
…………………… 
中间部分省略 
…………………… 
/******************************************************************** 
函数功能:将整数转按十进制字符串发送。 
入口参数:x:待显示的整数。 
返    回:无。 
备    注:无。 
********************************************************************/ 
void PrintLongInt(uint32 x) 
{ 
 uchar8 i; 
 uchar8 display_buffer[10]; 
 
 for(i=9;i>=0;i--) 
  { 
   display_buffer='0'+x%10;//取x的个位赋值在display_buffer[9] 
   x/=10; 
  } 
 for(i=0;i<9;i++)//从x的高位检测非0位开始显示 
  { 
   if(display_buffer!='0')break;//检测到非0位跳出循环 
  } 
 for(;i<10;i++)UartPutChar(display_buffer); 
} 
////////////////////////End of function////////////////////////////// 
 
/******************************************************************** 
函数功能:以HEX格式发送一个byte的数据。 
入口参数:待发送的数据 
返    回:无。 
备    注:无。 
********************************************************************/ 
void PrintHex(uchar8 x) 
{ 
 Printc('0'); 
 Printc('x'); 
 Printc(HexTable[x>>4]);//16进制先显示高4位 
 Printc(HexTable[x&0xf]);//显示低4位高4位清0 
 Printc(' '); 
} 
////////////////////////End of function////////////////////////////// 
 
 
 
PDIUSBD12.c文件具体调用的地方 
#include <AT89x52.H> 
#include "MyType.h" 
#include "PDIUSBD12.H" 
#include "UART.h" 
…………………… 
中间部分省略 
…………………… 
/******************************************************************** 
函数功能:读取端点缓冲区数据长度 
入口参数:Endp 端点号0-2 Len 想要读取数据长度 *Buf 具体的数据  
返    回: 
备    注: 
********************************************************************/ 
uchar8 D12ReadEndpointBuffer(uchar8 Endp,uchar8 Len,uchar8 *Buf) 
{ 
uchar8 i,j; 
D12SelectEndpoint(Endp);//选择端点号 
D12WriteCommand(D12_READ_BUFFER_COMMAND);//发送读缓冲区命令0xf0 
D12ReadByte();//第一字节丢弃无用 
j=D12ReadByte();//第2字节实际的缓冲区数据长度 
if(j>Len){j=Len;}//如果实际输入的数据比想要读取的数据长那么取想要读取的数据长度 
#ifdef DEBUG0 
Prints("读端点号");                         //端点号。由于D12特殊的端点组织形式, 
PrintLongInt(Endp/2);        //这里的0和1分别表示端点0的输出和输入; 
Prints("缓冲区");                 //而2、3分别表示端点1的输出和输入; 
PrintLongInt(j);                      //4、5分别表示端点2的输出和输入。 
Prints("字节。\r\n");        //因此要除以2才显示对应的端点。 
#endif 
for(i=0;i<j;i++) 
        { 
        D12ClrRd(); 
        *(Buf+i)=D12GetData(); 
        D12SetRd(); 
        #ifdef DEBUG0 
        PrintHex(*(Buf+i)); 
        if((i+1)%16==0){Prints("\r\n");}//每16字节换一行 
        #endif 
        } 
return j; 
} 
////////////////////////End of function////////////////////////////// 
 |   
     
  
 |