实现printf函数
This commit is contained in:
42
riscv/main.c
42
riscv/main.c
@@ -1,5 +1,6 @@
|
|||||||
#include "stdint.h"
|
#include "stdint.h"
|
||||||
|
#include "stdio.h"
|
||||||
|
#include "stdarg.h"
|
||||||
|
|
||||||
#define PRINT_BASE_ADDR *(uint8_t *)0x40000000
|
#define PRINT_BASE_ADDR *(uint8_t *)0x40000000
|
||||||
|
|
||||||
@@ -9,29 +10,44 @@ int my_putc(int c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int my_puts(char *s) {
|
int my_puts(char *s,int len) {
|
||||||
while (*s) {
|
for (int i = 0;i < len;i++) {
|
||||||
my_putc(*s);
|
my_putc(s[i]);
|
||||||
s++;
|
|
||||||
}
|
}
|
||||||
// for (int i = 0;i < 10;i++) {
|
|
||||||
// my_putc(*s);
|
|
||||||
// s++;
|
|
||||||
// }
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char g_print_buff[1024];
|
||||||
|
int my_printf(const char* fmt, ...) {
|
||||||
|
int len = 0;
|
||||||
|
va_list args;
|
||||||
|
va_start(args, fmt);
|
||||||
|
len = vsnprintf(g_print_buff, 1024, fmt, args);
|
||||||
|
va_end(args);
|
||||||
|
my_puts(g_print_buff, len);
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int add(int a, int b) {
|
int add(int a, int b) {
|
||||||
return a+b;
|
return a+b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char g_string[] = "string from ram";
|
||||||
|
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
// int a=1;
|
int a=1;
|
||||||
// int b=2;
|
int b=2;
|
||||||
// int c = add(a, b);
|
int c = add(a, b);
|
||||||
my_puts("Hello World!\n");
|
my_printf("Hello World! %s\n", "Andy");
|
||||||
|
my_printf("add(%d, %d)=%d\n", a, b, c);
|
||||||
|
a = 67;b = 78;
|
||||||
|
my_printf("mul(%d, %d)=%d\n", a, b, a * b);
|
||||||
|
my_printf("ram_val test: %s\n", g_string);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
Reference in New Issue
Block a user