0

我有一个这样定义的多项选择菜单:

menu "Audio"

choice
    prompt "Select Audio Output"
    default I2S
    help
        This option selects the audio output.

    config AUDIO_OUTPUT_MODE_I2S
        bool "Generic I2S"
    config AUDIO_OUTPUT_MODE_I2S_MERUS
        bool "Merus Audio I2S"
    config AUDIO_OUTPUT_MODE_DAC_BUILT_IN
        bool "Built-In DAC"
endchoice

config AUDIO_OUTPUT_MODE
    string
    default I2S
    default I2S if AUDIO_OUTPUT_MODE_I2S
    default I2S_MERUS if AUDIO_OUTPUT_MODE_I2S_MERUS
    default DAC_BUILT_IN if AUDIO_OUTPUT_MODE_DAC_BUILT_IN

config DAC_BUG_WORKAROUND
    bool "Activate workaround when using Built-In DAC"

endmenu

我想将选择映射到枚举,但 Kconfig 只有三态和字符串类型,所以我不能这样做,因为 AUDIO_OUTPUT_MODE 的值是字符串而不是文字:

my_enum = AUDIO_OUTPUT_MODE;

直接使用 int 会起作用,但有更清洁的解决方案吗?

4

1 回答 1

0

在您的 makefile 中,您可以将选择作为预处理器定义传递:

CFLAGS-$(CONFIG_CHOICE_A) += -Dchoice=enum_value_a
CFLAGS-$(CONFIG_CHOICE_B) += -Dchoice=enum_value_b
CFLAGS-$(CONFIG_CHOICE_C) += -Dchoice=enum_value_c

然后附加选定的标志:

CFLAGS += $(CFLAGS-y)

然后在这种情况下将其作为 C 代码中的“选择”宏访问。

于 2017-11-02T11:01:00.710 回答