UEFI原理与编程实践--PCD的使用

PCD说白了就是个全局变量,就看你怎么去调用了,先看一下它的定义用法:

 然后再看一下通过编译后有AutoGen生成的一个定义:

 PCD的类型有很多种,但是经常使用的也就是静态PCD与动态PCD

静态PCD

(干货)

顾名思义,就是一个静态全局变量,这种变量有个特点,一旦赋值了,是不能改动的,而且只能get不能set,这应该容易理解。典型代表:PcdsFixedAtBuild.common,这种需要说明一下,如果你在dec文件中定义了,然后又在dsc文件中定义,编译器只会选择dsc文件中定义的,也就是说,dsc文件中的定义会覆盖dec文件中的定义。当然还有一种情况,那就是FV的address和size,这个就是在FDF中定义咯。代码中怎么用?直接inf包含dec和PCD那列填入整个变量名,然后就直接使用PCD的函数get就行

动态PCD

PcdsDynamicDefault.common.DEFAULT,动态全局变量,这种PCD变量可以在代码中进行更改并进行传递,可以使用pcdget和pcdset,在使用动态PCD的时候需要特别注意,我操作过程中发现,不管你在dec还是dsc设置默认值,只要没使用过pcdset进行重设,那么编译出来貌似是个0,所以我的建议,一定要在某个地方进行pcdset,然后在pcdset后进行pcdget就行,这个值绝对是你想要的。比如:

UINT8 INDEX;

PcdSet8 (PcdXXXXX, INDEX);

OK,PCD理解这些基本上就可以使用了,protocol,variable,pcd,UEFI的三驾马车就说完了

猜你喜欢

转载自blog.csdn.net/u011397314/article/details/121511701