예제 #1
0
/* start debugging tool */
void chipcardLabDebug(void)
{
	char c_userSelection;
	int i_tempData;

	printf("==INTEGRATED DEBUGGING TOOL==\n\r");

	printf("This is a tool that might be helpful to find problems with the chipcardLab.\n\r");
	printf("The tool allows you to read and write the registers of the chipcardLab hardware\n\r");
	printf("directly. So you can discover problems with the firmware and or the serial\n\r");
	printf("connection.\n\r");
	
	chipcardLabDebugHelp();
	
	do
	{
		printf("\n\r>>> ");

		do 
		{
			improvedScanf("%c", &c_userSelection);
		}
		while((c_userSelection == '\n')||(c_userSelection == '\r'));

		c_userSelection = toupper(c_userSelection);

			switch(c_userSelection)
			{
				case 'A': printf("Cardslot status is: ");
					  i_tempData = getRawCardslotStatus();
					  printfBinary(i_tempData);
					  printf(" %hhx", i_tempData);
					  printf("\n\r");
					  break;

				case 'B': printf("Terminal status is: ");
					  i_tempData = getRawTerminalStatus();
					  printfBinary(i_tempData);
					  printf(" %hhx", i_tempData);
					  printf("\n\r");
					  break;

				case 'C': printf("New cardslot status ==> ");
					  improvedScanf("%hhx", &c_userSelection);
					  setRawCardslotStatus(c_userSelection);
					  printf("\n\r");
					  break;

				case 'D': printf("New terminal status ==> ");
					  improvedScanf("%hhx", &c_userSelection);
					  setRawTerminalStatus(c_userSelection);
					  printf("\n\r");
					  break;

				case 'E': printf("New cardslot direction ==> ");
					  improvedScanf("%hhx", &c_userSelection);
					  setRawCardslotDirection(c_userSelection);
					  printf("\n\r");
					  break;

				case 'F': printf("New terminal direction ==> ");
					  improvedScanf("%hhx", &c_userSelection);
					  setRawTerminalDirection(c_userSelection);
					  printf("\n\r");
					  break;

				case 'G': printf("Cardslot direction status is: ");
					  i_tempData = getRawCardslotDirectionStatus();
					  printfBinary(i_tempData);
					  printf(" %hhx", i_tempData);
					  printf("\n\r");
					  break;

				case 'H': printf("Terminal direction status is: ");
					  i_tempData = getRawTerminalDirectionStatus();
					  printfBinary(i_tempData);
					  printf(" %hhx", i_tempData);
					  printf("\n\r");
					  break;

				case 'I': printf("Cardslot output status is: ");
					  i_tempData = getRawCardslotOutputStatus();
					  printfBinary(i_tempData);
					  printf(" %hhx", i_tempData);
					  printf("\n\r");
					  break;

				case 'J': printf("Terminal output status is: ");
					  i_tempData = getRawTerminalOutputStatus();
					  printfBinary(i_tempData);
					  printf(" %hhx", i_tempData);
					  printf("\n\r");
					  break;

				case 'U': printf("Performing software-uart transmitter test...\r\n");
					  chipcardLabTransmitterTest();
					  printf("\r\n");
					  break;

				case 'R': printf("Performing software-uart receiver test...\r\n");
					  chipcardLabReceiverTest();
					  printf("\r\n");
					  break;

				case '?': chipcardLabDebugHelp();
				break;

				case 'X': printf("Exiting debug tool...\n\r");
				break;

				default:  printf("^invalid selection\n\r");
			}

	} while(c_userSelection != 'X');

	return;
}
int main(){
    
    /*
     
    //00000000 00000000 00000000 00000001
    //1.变量寻址,从大到小.以所在的内存中第一个字节(地址值最小的那一个)为当前变量的地址.
        二进制表现形式是高位字节对应高位二进制
    int a=1;
    int b=3;
    char c='a';
     
    //二进制:0b;八进制:0开头 十六进制:0x.不区分大小写
    //8.-128~127 unsigned 0~255;
    
    unsigned long int;short;long long
    long long>long >int>short
     
    printf("%c\n",200);
     
    */
    
    
    /*
     
     1.用位运算实现两个整数值的互换.
     2.用位运算判断一个整数的奇偶性.
     3.编写一个函数输出一个整数的二进制表现形式.

     */
    
    
    /* 
     1.用位运算实现两个整数值的互换.
     
     方法一:用临时变量
     
    int a=1;
    int b=2;
    printf("a=%d,b=%d\n",a,b);
    int temp=a;
    a=b;
    b=temp;
    printf("a=%d,b=%d\n",a,b);
     */
    
    
    /*
     方法二
     
    int a=1;
    int b=2;
     printf("a=%d,b=%d\n",a,b);
    a=b-a;
    b=b-a;
    a=b+a;
     printf("a=%d,b=%d\n",a,b);
     
     */
    
    
    /*
     
     方法三:用位运算
     
    //printf("1^8^8=%d\n",1^8^8);
    int a=1;
    int b=2;
    printf("a=%d,b=%d\n",a,b);
    a=a^b;//1^2;
    b=a^b;//==a^b^b;==1^2^2
    a=a^b;//==a^b^a;==1^2^1
    printf("a=%d,b=%d\n",a,b);
     
     */
    
    /* 
     2.用位运算判断一个整数的奇偶性.
     
    int a=4;//4%2=0 5%2=1 6%2=0 7%2=1
     
    if(0==a%2){
        printf("a=%d是偶数\n",a);
    }else{
        printf("a=%d是奇数\n",a);
    }
     
    //0==a%2?printf("a=%d是偶数\n",a):printf("a=%d是奇数\n",a);
    !(a%2)?printf("a=%d是偶数\n",a):printf("a=%d是奇数\n",a);
    
    0011 1111
   &0000 0001
    ---------
    0000 0001
    1 0001
    2 0010
    3 0011
    4 0100
     
     !(a&1)?printf("a=%d是偶数\n",a):printf("a=%d是奇数\n",a);
     
    */
    
    
    printfBinary(12);
    printf("%d\n",~0);
    
    return 0;
    
}