这个枚举在这个驱动程序中是如何工作的?
How does this enumeration work in this driver?
当我研究 mxs-auart.c
驱动程序的代码时,我注意到以下声明:
enum mxs_auart_type {
IMX23_AUART,
IMX28_AUART,
ASM9260_AUART,
};
然后是:
static const struct platform_device_id mxs_auart_devtype[] = {
{ .name = "mxs-auart-imx23", .driver_data = IMX23_AUART },
{ .name = "mxs-auart-imx28", .driver_data = IMX28_AUART },
{ .name = "as-auart-asm9260", .driver_data = ASM9260_AUART },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(platform, mxs_auart_devtype);
static const struct of_device_id mxs_auart_dt_ids[] = {
{
.compatible = "fsl,imx28-auart",
.data = &mxs_auart_devtype[IMX28_AUART]
}, {
.compatible = "fsl,imx23-auart",
.data = &mxs_auart_devtype[IMX23_AUART]
}, {
.compatible = "alphascale,asm9260-auart",
.data = &mxs_auart_devtype[ASM9260_AUART]
}, { /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, mxs_auart_dt_ids);
我不明白的是,例如 IMX28_AUART
怎么可以像 .data = &mxs_auart_devtype[IMX28_AUART]
一样使用。举个例子 enum mxs_auart_type value = IMX28_AUART
,难道我们不必事先实例化一个变量来使用枚举值吗?
我知道在 C 的枚举中,值等于默认从 0 开始的整数,但我不禁对此感到困惑。
谁能帮助我更好地理解这一点?
谢谢
enum
允许您为常量值命名。出于所有意图和目的,您可以将 enum
名称视为整数文字。
在这种情况下:
.data = &mxs_auart_devtype[IMX28_AUART]
名称IMX28_AUART
被视为1
,因此代码相同:
.data = &mxs_auart_devtype[1]
Don't we have to instanciate a variable beforehand to use the enum values by doing as an example enum mxs_auart_type value = IMX28_AUART
?
完全没有。
完成后:
enum MyEnum {A, B, C};
您将拥有三个全局可用的名称:A
、B
和 C
,固定整数值为 0
、1
和2
相应地。
看看这个有用的 post 了解更多:"static const" vs "#define" vs "enum".
当我研究 mxs-auart.c
驱动程序的代码时,我注意到以下声明:
enum mxs_auart_type {
IMX23_AUART,
IMX28_AUART,
ASM9260_AUART,
};
然后是:
static const struct platform_device_id mxs_auart_devtype[] = {
{ .name = "mxs-auart-imx23", .driver_data = IMX23_AUART },
{ .name = "mxs-auart-imx28", .driver_data = IMX28_AUART },
{ .name = "as-auart-asm9260", .driver_data = ASM9260_AUART },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(platform, mxs_auart_devtype);
static const struct of_device_id mxs_auart_dt_ids[] = {
{
.compatible = "fsl,imx28-auart",
.data = &mxs_auart_devtype[IMX28_AUART]
}, {
.compatible = "fsl,imx23-auart",
.data = &mxs_auart_devtype[IMX23_AUART]
}, {
.compatible = "alphascale,asm9260-auart",
.data = &mxs_auart_devtype[ASM9260_AUART]
}, { /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, mxs_auart_dt_ids);
我不明白的是,例如 IMX28_AUART
怎么可以像 .data = &mxs_auart_devtype[IMX28_AUART]
一样使用。举个例子 enum mxs_auart_type value = IMX28_AUART
,难道我们不必事先实例化一个变量来使用枚举值吗?
我知道在 C 的枚举中,值等于默认从 0 开始的整数,但我不禁对此感到困惑。
谁能帮助我更好地理解这一点? 谢谢
enum
允许您为常量值命名。出于所有意图和目的,您可以将 enum
名称视为整数文字。
在这种情况下:
.data = &mxs_auart_devtype[IMX28_AUART]
名称IMX28_AUART
被视为1
,因此代码相同:
.data = &mxs_auart_devtype[1]
Don't we have to instanciate a variable beforehand to use the enum values by doing as an example
enum mxs_auart_type value = IMX28_AUART
?
完全没有。
完成后:
enum MyEnum {A, B, C};
您将拥有三个全局可用的名称:A
、B
和 C
,固定整数值为 0
、1
和2
相应地。
看看这个有用的 post 了解更多:"static const" vs "#define" vs "enum".