[feat] 串口hex输出可选择是否补0
This commit is contained in:
@@ -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
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user