⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serial.c

📁 linux下的jtag调试软件
💻 C
字号:
#include <pxa250regs.S>#include <stdarg.h>#include "serial.h"void serial_send_byte(int byte){	volatile int * const lsr= (volatile int *)(FFUART_BASE+UART_LSR);	volatile int * const thr= (volatile int *)(FFUART_BASE+UART_THR);	while (((*lsr) & SIO_LSR_THRE) == 0) ;	*thr = byte;}int printf(const char *format, ...){	va_list ap;	char c;	va_start(ap, format);	while (1)	{		c=*format;		switch (c)		{			// end of string			case 0:			{				goto stopPrintf;			}			break;			// special char			case '%':			{				c=*(++format);				switch (c)				{					// end of string					case 0:					{						goto stopPrintf;					}					break;					// display %					case '%':					{						serial_send_byte('%');					}					break;					// char					case 'c':					{						char typeC=va_arg(ap, int);						serial_send_byte(typeC);					}					break;					// string					case 's':					{						char *typeCP=va_arg(ap, char *);						if (typeCP)						{							while (*typeCP)							{								serial_send_byte(*typeCP);								typeCP++;							}						}						else						{							serial_send_byte('n');							serial_send_byte('u');							serial_send_byte('l');							serial_send_byte('l');						}					}					break;					// hexadecimal unsigned int					case 'x':					case 'X':					{						int i, v;						unsigned int typeUI=va_arg(ap, unsigned int);						char baseChar;						if (c=='x')							baseChar='a';						else							baseChar='A';						for (i=28; i>=0; i-=4)						{							v=(typeUI>>i)&0xF;							serial_send_byte(v < 10 ? ('0'+v) : (baseChar+(v-10)));						}					}					break;					// binary					case 'b':					{						int i, v;						unsigned int typeB=va_arg(ap, unsigned int);						for (i=31; i>=0; i--)						{							v=(typeB>>i)&0x1;							serial_send_byte(v == 1 ? '1' : '0');						}					}					break;					// decimal unsigned int					case 'u':					{						unsigned int typeUI=va_arg(ap, unsigned int);						unsigned int div;						int hasPut=0;						for (div=1000000000; div>0; div/=10)						{							unsigned int aff=typeUI/div;							typeUI%=div;							if ((aff!=0) || (hasPut))							{								hasPut=1;								serial_send_byte('0'+aff);							}						}						if (!hasPut)							serial_send_byte('0');					}					break;					// decimal signed int					case 'd':					{						int typeI=va_arg(ap, int);						unsigned int vAbs;						unsigned int div;						int hasPut=0;						if (typeI<0)						{							vAbs=(unsigned)(-typeI);							serial_send_byte('-');						}						else						{							vAbs=(unsigned)typeI;						}						for (div=1000000000; div>0; div/=10)						{							unsigned int aff=vAbs/div;							vAbs%=div;							if ((aff!=0) || (hasPut))							{								hasPut=1;								serial_send_byte('0'+aff);							}						}						if (!hasPut)							serial_send_byte('0');					}					break;					// display char if not handled					default:					{						serial_send_byte(c);					}					break;				}			}			break;			// other			default:			{				serial_send_byte(c);			}			break;		}		format++;	}// clean stack and returnstopPrintf:	va_end(ap);	// TODO : return number of printed character	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -