问题描述
我正在尝试了解 EDK2 中的动态 PCD。
[PcdsDynamic]
gMyPkgTokenSpaceGuid.PcdMyDynamicVar32|42|UINT32|0x00000001
并已将此代码添加到我的 UEFI 应用程序 INF 文件中:
[Pcd]
gMyPkgTokenSpaceGuid.PcdMyDynamicVar32
我正在尝试在我的应用程序中使用 PCD,如下所示:
Print(L"PcdMyDynamicVar32=%d\n",PcdGet32(PcdMyDynamicVar32));
PcdSet32S(PcdMyDynamicVar32,52);
Print(L"PcdMyDynamicVar32=%d\n",PcdGet32(PcdMyDynamicVar32));
但是当我尝试编译时,令牌号没有填充到 AutoGen.h 中:
#define _PCD_TOKEN_PcdMyDynamicVar32 0U
#define _PCD_GET_MODE_32_PcdMyDynamicVar32 LibPcdGet32(_PCD_TOKEN_PcdMyDynamicVar32)
#define _PCD_GET_MODE_SIZE_PcdMyDynamicVar32 LibPcdGetSize(_PCD_TOKEN_PcdMyDynamicVar32)
#define _PCD_SET_MODE_32_PcdMyDynamicVar32(Value) LibPcdSet32(_PCD_TOKEN_PcdMyDynamicVar32,(Value))
#define _PCD_SET_MODE_32_S_PcdMyDynamicVar32(Value) LibPcdSet32S(_PCD_TOKEN_PcdMyDynamicVar32,(Value))
因此,我在第一个 PcdGet32
调用中得到 0,而我的应用程序在 PcdSet32S
调用中冻结。
但是如果我在我的包中将 [PcdsDynamic]
更改为 [PcdsDynamicEx]
将填充令牌值:
#define _PCD_TOKEN_gMyPkgTokenSpaceGuid_PcdMyDynamicVar32 1073741828U
#define _PCD_TOKEN_PcdMyDynamicVar32 _PCD_TOKEN_gMyPkgTokenSpaceGuid_PcdMyDynamicVar32
#define _PCD_GET_MODE_32_PcdMyDynamicVar32 LibPcdGetEx32(&gMyPkgTokenSpaceGuid,_PCD_TOKEN_PcdMyDynamicVar32)
#define _PCD_GET_MODE_SIZE_PcdMyDynamicVar32 LibPcdGetExSize(&gMyPkgTokenSpaceGuid,_PCD_TOKEN_PcdMyDynamicVar32)
#define _PCD_SET_MODE_32_PcdMyDynamicVar32(Value) LibPcdSetEx32(&gMyPkgTokenSpaceGuid,_PCD_TOKEN_PcdMyDynamicVar32,(Value))
#define _PCD_SET_MODE_32_S_PcdMyDynamicVar32(Value) LibPcdSetEx32S(&gMyPkgTokenSpaceGuid,(Value))
我的错误是什么?为什么在使用 [PcdsDynamic]
时没有填充令牌值?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)