最近有在屏幕输出数据的需求,但是无法直接使用 Print 。经过对于 PrintLib 的一番研究,得出了结论:
UEFI Shell 下的Print 的实现可以看作两个动作,一个根据输入格式化得到字符串,另外一个是使用 gST 进行输出。简单的说就是:
Print=UnicodeSPrint+ gST->ConOut->OutputString
编写测试代码:
#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/ShellCEntryLib.h>
#include <Library/PrintLib.h>
extern EFI_SYSTEM_TABLE *gST;
INTN
EFIAPI
ShellAppMain (
IN UINTN Argc,
IN CHAR16 **Argv
)
{
CHAR16 Buffer[32];
UnicodeSPrint((CHAR16 *)Buffer,sizeof(Buffer),L"%x\n",2024);
gST->ConOut->OutputString(gST->ConOut,Buffer);
return(0);
}
运行结果:
如果你在调试 Application 或者Driver遇到无法直接使用 Print 的情况,不妨考虑本文提到的方法。当然,如果你有从串口或者其他设备输出调试数据的时候,也可以考虑UnicodeSPrint()来实现数据格式化方便阅读调试。