[feat] 串口hex输出可选择是否补0

This commit is contained in:
2026-06-05 20:18:53 +08:00
Unverified
parent 60a9b9e97d
commit 3d47667c2f
3 changed files with 25 additions and 9 deletions
+1 -1
View File
@@ -135,7 +135,7 @@ disk: vdir
run: disk
@echo "Launching QEMU"
@qemu-system-x86_64 -bios /usr/share/ovmf/OVMF.fd -net none -drive file=build/disk.img,index=0,format=raw -serial file:serial.log -s -S
@qemu-system-x86_64 -bios /usr/share/ovmf/OVMF.fd -net none -drive file=build/disk.img,index=0,format=raw -serial stdio -serial file:serial.log -s -S
clean:
@echo "Cleaning old files"
+1 -1
View File
@@ -13,5 +13,5 @@ extern serial_context g_serial;
void serial_init(EFI_SERIAL_IO_PROTOCOL *SerialIo); // 初始化串行驱动
void serial_write(String str); // 往串行写string
void serial_write_char(char c); // 往串行写char(不推荐使用)
void serial_write_hex(UINTN val); // 往串行写十六进制数字
void serial_write_hex(UINTN val, bool fill = true); // 往串行写十六进制数字(fill=false 不补前导0
char serial_read_char(); // 读串行
+23 -7
View File
@@ -32,15 +32,31 @@ void serial_write(String str) {
}
}
void serial_write_hex(UINTN val) {
void serial_write_hex(UINTN val, bool fill) {
char buf[19];
buf[0] = '0'; buf[1] = 'x';
for (SSINT32 i = 17; i >= 2; i--) {
UINTN digit = val & 0xF;
buf[i] = digit < 10 ? '0' + digit : 'A' + digit - 10;
val >>= 4;
buf[0] = '0';
buf[1] = 'x';
SSINT32 pos = 2;
if (val == 0) {
buf[pos++] = '0';
} else {
char tmp[17];
SSINT32 len = 0;
while (val) {
UINTN digit = val & 0xF;
tmp[len++] = digit < 10 ? '0' + digit : 'A' + digit - 10;
val >>= 4;
}
if (fill) {
while (len < 16) {
buf[pos++] = '0';
}
}
for (SSINT32 i = len - 1; i >= 0; i--) {
buf[pos++] = tmp[i];
}
}
buf[18] = '\0';
buf[pos] = '\0';
serial_write(buf);
}