From b1509a222f0f6ce0d4d7f8f18bbc8ddbaf0bf389 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E5=85=89=E8=BD=A9?= <16236948+zhou-guangxuan159632@user.noreply.gitee.com> Date: Tue, 23 Sep 2025 13:08:11 +0000 Subject: [PATCH] update src/kernel/lib/print.c. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 周光轩 <16236948+zhou-guangxuan159632@user.noreply.gitee.com> --- src/kernel/lib/print.c | 55 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/src/kernel/lib/print.c b/src/kernel/lib/print.c index b84cd1c..770f7c1 100644 --- a/src/kernel/lib/print.c +++ b/src/kernel/lib/print.c @@ -59,7 +59,56 @@ static void printptr(uint64 x) */ void printf(const char *fmt, ...) { - + va_list args; + va_start(args, fmt); + spinlock_acquire(&print_lk); // 加锁,保证UART资源的独占访问 + // 遍历格式字符串 + while (*fmt) { + if (*fmt != '%') { + uart_putc_sync(*fmt); + fmt++; + continue; + } + fmt++; + switch (*fmt) { + case 'd': { + int num = va_arg(args, int); + printint(num, 10, 1); + break; + } + case 'p': { + uint32_t ptr = va_arg(args, uint32_t); + printptr(ptr); + break; + } + case 'x': { + uint64_t num = va_arg(args, uint64_t); + printptr(num); + break; + } + case 'c': { + char ch = va_arg(args, int); + uart_putc_sync(ch); + break; + } + case 's': { + char *str = va_arg(args, char*); + while (*str) { + uart_putc_sync(*str); + str++; + } + break; + } + default: + // 处理未知格式说明符 + uart_putc_sync('%'); + uart_putc_sync(*fmt); + break; + } + fmt++; + } + va_end(args); + spinlock_release(&print_lk); } @@ -79,5 +128,7 @@ void panic(const char *s) /* 如果不满足条件, 则调用panic */ void assert(bool condition, const char *warning) { - + if (!condition) { + panic(warning); + } } -- Gitee