UEFI的 StdLib 中内置了一些数学运算操作,在Math.h中可以找到tan, sin 等等。这次测试一下如何调用sin() 函数。
首先,要保证 \AppPkg\AppPkg.dsc 末尾有如下定义:
!include StdLib/StdLib.inc
接下来在编写的 UEFI程序对应的 inf 文件中LibraryClasses下面有引用 LibMath:
[LibraryClasses]
LibC
LibStdio
ShellCEntryLib
ShellLib
BaseLib
BaseMemoryLib
UefiLib
LibMath
最后,代码中 include math.h 即可。
示例代码:
1. MathTest.c 如下:
#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/ShellCEntryLib.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
extern EFI_BOOT_SERVICES *gBS;
int
EFIAPI
main (
IN int Argc,
IN char **Argv
)
{
printf("Pi=%f\n",M_PI);
printf("sin(Pi/2)=%f\n",sin(M_PI /2));
printf("sin(Pi/4)=%f\n",sin(M_PI /4));
printf("sin(Pi/6)=%f\n",sin(M_PI /6));
return EFI_SUCCESS;
}
2. MathTest.inf 如下:
[Sources]
MathTest.c
[Packages]
StdLib/StdLib.dec
MdePkg/MdePkg.dec
ShellPkg/ShellPkg.dec
[LibraryClasses]
LibC
LibStdio
ShellCEntryLib
ShellLib
BaseLib
BaseMemoryLib
UefiLib
LibMath
代码运行结果:

你好,我重新Git了edk2017的代码,编译后运行NT32模拟器,可以进去,但是还是卡在了Shell处,键盘鼠标皆不可用。不知你是否有遇到过此类情况。
从经验来看这个可能是你的输入法导致的,建议你用纯英文操作系统先实验一下看看。
下面的评论中,有人遇到过类似问题
https://www.lab-z.com/udk2018coming/
谢谢,重新下载了输入法问题已经解决!