2016-12-22 38 views
-2

通过我的USB连接我收到一些命令,我​​想让它们对我的驱动程序可读。如何使用USB发送数据并使用驱动程序进行读取?

第一个字符是字母S,之后有几个数字(4)进来。 我想将这个数字从asci转换为decimal,然后在其他函数中将它们写为HEX。最大大小可以是20位。

由于我是新来的C我有这个转换的问题。

如果有人能给我一些建议,我会很高兴。

u8 x; 
u8 xx; 
u8 xxx; 
u8 xxxx; 
u32 y; 

void ProcessCommandUSB(u8 b_Data[USB_COMMAND_LENGTH],u8 b_DataLength) 
{ 
    switch (b_Data[0]) // process first byte 
    { 
    case '\r': // ignore 
     break; 

    case '\n': // ignore 
     break; 

    ////// SPEED /////// 
    case 'S': 
     x= b_Data[1]; 
     xx= b_Data[2]; 
     xxx= b_Data[3]; 
     xxxx= b_Data[4]; 

// I NEED TO CHECK IF VARIABLES ARE NUUMBERS, OTHERWISE ERROR. 
if (x,xx,xxx,xxxx =='0')|(x,xx,xxx,xxxx =='1')|(x,xx,xxx,xxxx =='2')\ 
    |(x,xx,xxx,xxxx =='3')|(x,xx,xxx,xxxx =='4')|(x,xx,xxx,xxxx =='5')\ 
|(x,xx,xxx,xxxx =='6')|(x,xx,xxx,xxxx =='7')|(x,xx,xxx,xxxx =='8')|(x,xx,xxx,xxxx =='9'); 
{ 
     //to make asci char, decimal 
     x = (x-48)* 1000; 
     xx = (xx-48)* 100; 
     xxx =(xxx-48)* 10; 
     xxxx -= 48; 
    y=x+xx+xxx+xxxx; 
} 
    //THIS PART OF CODE DOWN WORKS, AND I WANT TO WRITE THE BYTES RECEIVED 
    //WITH S COMMAND (Y), IN FUNCTION RUN INSTEAD OF 0x034444. 

    else 
{ 
    sprintf(vrni, "D Error\r"); 
} 

USB_Send_String (vrni); 
    break; 

    case 'D': // version 

     if(b_Data[1] == '<') 
     { 
      RUN(REV, 0x034444); 
      sprintf(vrni, "nazaj\r"); 

      ....... //REST OF THE CODE WORKS 
+1

您的意思是'xx =(xx-48)* 100;'和'xxx =(xxx-48)* 10;'?在这两行中我看不到你的'(x-48)'的点。 –

+0

是的! 对不起。 – surfer113

+0

您的意思是抱歉代码错误,或者发布的代码不是您的代码? –

回答

0

此示例显示了将四个十进制字节转换为数字然后以十六进制形式输出的一种方法。

#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 

int main(void){ 
    char message[24]; 
    char b_Data[] = "S9876"; 
    unsigned num; 
    if(b_Data[0] == 'S') { 
     if(isdigit(b_Data[1]) && isdigit(b_Data[2]) && 
           isdigit(b_Data[3]) && isdigit(b_Data[4])) { 
      num = (b_Data[1] - '0') * 1000 + 
        (b_Data[2] - '0') * 100 + 
        (b_Data[3] - '0') * 10 + 
        b_Data[4] - '0';    // use '0' not magic number 
      sprintf(message, "%05X", num); 
      printf ("%s\n", message); 
     } 
    } 
    return 0; 
} 

程序输出:

02694 

顺便说一句,你x变量,8位是不是大到足以容纳你分配给它的价值。

+0

非常感谢您的好意和帮助,但我不知道输出如何变成02694? 如果现在我理解正确我只需要编写,而不是0x034444无符号NUM(在功能运行的情形下R) – surfer113

+0

小数点输入'9876'是十六进制'02694',这是用'%05X'格式说明创建。 –

+0

谢谢,现在我对它更加清楚,如何完成我的项目! – surfer113

相关问题