/* 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; }