📄 serial.c
字号:
#include "serial.h"#include "string.h"char queue(int a);short b[16];short c=1;int cnt=0;int _start(){ char a[128]; int i; init_uart0(115200); init_uart1(115200); for(i=0;i<128;i++){ a[i]=0; } uart_write(0,"请输入一个数字:\r\n\0",40); uart_read(0,a,15); uart_write(0,a,15); uart_write(0,"\r\n",2); i=atoi(a); uart_write(0,int2str(a,i),15); uart_write(0,"\r\n",2); c=0; queue(i); return 0; }unsigned int uart_read(int fd,void *buf,unsigned int size){ unsigned int i=0; for(i=0;i<size;i++){ if(fd==0){ if(((rUFSTAT0)&0xf)<15) rUMCON0|=1; else rUMCON0&=0xfffffffe; while(!(rUTRSTAT0 & 0x1)) ; ((char *)(buf))[i]=RdURXH0(); } else{ if(((rUFSTAT1)&0xf)<15) rUMCON1|=1; else rUMCON1&=0xfffffffe; while(!(rUTRSTAT1 & 0x1)) ; ((char *)(buf))[i]=rURXH1; } if(((char *)(buf))[i] == '\r') { ((char *)(buf))[i]='\0'; return i; } } return i;}unsigned int uart_write(int fd,const void *buf,unsigned int size){ unsigned int i=0; for(i=0;i<size;i++){ if(((char *)(buf))[i]=='\0') return (i); if(fd == 0){ while(!(rUTRSTAT0&0x2)) ; WrUTXH0(((char *)(buf))[i]); } else{ while(!(rUTRSTAT1&0x2)) ; rUTXH1=((char *)(buf))[i]; } } return i;}int atoi(const char *src){ char *p=(char *)src; int res=0,i=0; for(;isdigit(src[i]);i++){ res*=10; res+=(src[i]-'0'); } return res;}char *int2str(char *a,int b){ char c=0; int i,j=0,t=b,k; a[0]='0'; a[1]='\0'; for(i=1;i<10;i++){ if(!t) break; k=t%10; t=t/10; a[j++]=(char)(k+'0'); } a[j]='\0'; j--; for(i=0;i<j;i++,j--){ c=a[i]; a[i]=a[j]; a[j]=c; } return a;}void outBin(unsigned b){ int i=1,j=(0x1<<(c-1)); for(;i<=c;i++,j>>=1){ if(b&j) uart_write(0,"1",1); else uart_write(0,"0",1); } uart_write(0,"\r\n",2);}char queue(int a){ int i; unsigned short j,k; unsigned short can=0; char t[20]; if(a>14) return 0; if(a>c){ c=a; cnt=0; for(i=0;i<16;i++) b[i]=0; } for(i=c;i>a;i--){ can|=b[i]; can|=(b[i]>>(i-a)); can|=(b[i]<<(i-a)); } for(i=0;i<20;i++) t[i]=0; //uart_write(0,int2str(t,a),12); //uart_write(0,"\r\n",2); //outBin(can); if(a==1){ if(can==0xffff) return 0; else{ j=(0x1<<(c-1)); while(j){ if(!(j&can)){ for(i=0;i<20;i++) t[i]=0; cnt++; uart_write(0,"Case:",5); uart_write(0,int2str(t,cnt),12); uart_write(0,"\r\n",2); b[a]=j; for(i=c;i>=1;i--) outBin(b[i]); } j=(j>>1); } return 1; } } j=(0x1<<(c-1)); while(j){ if(!(j&can)){ b[a]=j; queue(a-1); } j=(j>>1); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -