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

📄 printk.c

📁 嵌入式实验uC-OS-II相关程序用例与参考资料
💻 C
字号:
#include <stdarg.h>
#define FALSE (0)
#define TRUE (1)

static void PrintNum(unsigned long long udwNum, int wBase, unsigned int oSign)
{

	unsigned long long n;
	int	count;
	char	toPrint[20];

	if (oSign && ((long long)udwNum <  0) )
	{
		BSP_DisplayOutch('-');

		udwNum = -udwNum;
	}

	count = 0;
  	while ((n = udwNum / wBase) > 0)
  	{
		toPrint[count++] = (udwNum - (n*wBase));
		udwNum = n ;
  	}
  	toPrint[count++] = udwNum;

	for (n = 0; n < count; n++)
	{
		BSP_DisplayOutch("0123456789ABCDEF"[(int)(toPrint[count-(n+1)])]);
	}

}

void printk(char *fmt, ...)
{
	va_list	ap;      /* points to each unnamed argument in turn */
	char	c;
	char 	*str;
	int	lFlag;
	int 	base;
	int 	sign;
	unsigned int	level;

	/// 如果没有初始化成功prink设备,则直接返回

	va_start(ap, fmt); /* make ap point to 1st unnamed arg */
	for (; *fmt != '\0'; fmt++)
	{
		lFlag = FALSE;
		base  = 0;
		sign = FALSE;

		if (*fmt == '%')
		{
			if ((c = *++fmt) == 'l')
			{
				lFlag = TRUE;
				c = *++fmt;
			}

			switch (c)
			{
			case 'o':
			case 'O': 		// 八进制数据
				base = 8;
				sign = FALSE;

				break;
			case 'd':
			case 'D': 		// 十进制数据
				base = 10;
				sign = TRUE;

				break;
			case 'u':
			case 'U':		// 无符号数据
				base = 10;
				sign = FALSE;

				break;
			case 'x':
			case 'X':		// 十六进制数据
				base = 16;
				sign = FALSE;

				break;
			case 's':		// 字符串
				for (str = va_arg(ap, char *); *str; str++)
				{
					BSP_DisplayOutch(*str);
				}

				break;
			case 'c':		// 字符
			#ifdef __PPC__
				BSP_DisplayOutch(va_arg(ap, int));
			#else
				BSP_DisplayOutch((unsigned char)(va_arg(ap, int)));
			#endif

				break;
			default:
				BSP_DisplayOutch(c);
				break;
			} // end of switch

			if (base)
			{
				PrintNum(lFlag ? va_arg(ap, long long) : (long long)va_arg(ap, int), base, sign);
			}
		} //  end of if (*fmt == '%')
		else
		{
			BSP_DisplayOutch(*fmt);
		}
	} // end of for (; *fmt != '\0'; fmt++)

	va_end(ap); /* clean up when done */

}

⌨️ 快捷键说明

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