示例#1
0
文件: printk.c 项目: robixnai/armeiro
void printk(const char *fmt, ...)
{
	va_list va;
	va_start(va, fmt);

	while (*fmt) {
		if (*fmt != '%') {
			putk(*fmt);
			if (*fmt == '\n')
				putk('\r');
			fmt++;
		} else {
			fmt++;
			if (*fmt == '%') {
				putk(*fmt);
				fmt++;
			} else
			if (*fmt == 'd') {
				printdec(va_arg(va, int));
				fmt++;
			} else
			if (*fmt == 'x') {
				printhexL(va_arg(va, int));
				fmt++;
			} else
			if (*fmt == 'X') {
				printhexU(va_arg(va, int));
				fmt++;
			} else
			if (*fmt == 's') {
				printk(va_arg(va, const char *));
				fmt++;
			} else
			if (*fmt == 'b') {
				int size = 0;
				fmt++;
				if (*fmt == 'b')
					size = 8;
				else
				if (*fmt == 'w')
					size = 16;
				else
				if (*fmt == 'd')
					size = 32;
				else {
					fmt -= 2;
					size = 32;
				}
				fmt++;
				printbinary(va_arg(va, int), size);
			}
		}
	}
	va_end(va);
}
示例#2
0
/* Kernel printf requires a putk() function. */
void putk(int c)
{
	char ch = c;

	if (c == 0) return;
	if (c == '\n') putk('\r');
	(void) write(2, &ch, 1);
}
示例#3
0
文件: init.c 项目: greenmeent/rtems
rtems_task Init(
  rtems_task_argument argument
)
{
  TEST_BEGIN();

  do_putk();
  putk("");

  do_printk();
  putk("");

  do_getchark();

  TEST_END();
  rtems_test_exit( 0 );
}
示例#4
0
文件: init.c 项目: greenmeent/rtems
void do_getchark(void)
{
  int                                sc;
  BSP_polling_getchar_function_type  poll_char;

  poll_char = BSP_poll_char;

  BSP_poll_char = NULL;

  putk( "getchark - NULL getchar method - return -1" );
  sc = getchark();
  rtems_test_assert( sc == -1 );

  putk( "getchark - test getchar method - returns 0x35" );
  BSP_poll_char = test_getchar;
  sc = getchark();
  rtems_test_assert( sc == 0x35 );

  BSP_poll_char = poll_char;
}
示例#5
0
文件: printk.c 项目: robixnai/armeiro
static inline void printhexL(u32 val)
{
	static const char *hexn = "0123456789abcdef";
	int i = 32;
	int k = 7;
	while (i >= 4) {
		char c = hexn[(val >> (k * 4)) & 0xF];
		putk(c);
		k--;
		i -= 4;
	}
}
示例#6
0
文件: printk.c 项目: robixnai/armeiro
static inline void printdec(u32 val)
{
	u32 chr[DECIMAL_MAX];
	memclr(chr, DECIMAL_MAX * sizeof(u32));
	int i = 0;
	do {
		chr[i] = 0x30 + (val % 10);
		val /= 10;
		i++;
	} while ((val != 0) && (i < DECIMAL_MAX));
	i--;
	while (i >= 0) {
		putk(chr[i]);
		i--;
	}
}
示例#7
0
文件: init.c 项目: greenmeent/rtems
void do_putk(void)
{
  putk( "This is a test of putk" );
}