什么类型是“外围设备”。APB_SARADC.split()'?

What type is `peripherals.APB_SARADC.split()`?

提问人:Jason Kleban 提问时间:8/20/2023 更新时间:8/20/2023 访问量:43

问:

揭开神秘面纱中.分裂。。.. 使用 ADC 博客:

// Promote ADC peripheral to HAL-level Struct
let analog = peripherals.APB_SARADC.split();

但是我无法弄清楚返回类型是什么,甚至无法确定它使用的定义是什么。rust-analyzer 没有工具提示和“未找到 ”“ 的类型定义。工具提示只是说..split()splitsplitanaloglet analog: {unknown}

然后,我可以在此代码中使用它,该代码可以构建和运行而不会惊慌失措(尽管我正在尝试调试东西)

// Create handle for ADC, configuring clock, and passing configuration handle
    let mut adc = ADC::adc(
        &mut system.peripheral_clock_control,
        analog.adc1,                               // <<< "no definition found for `adc1`
        adc_config,
    )
    .unwrap();

ADC::adc 需要该参数,但我无法将其调整为上公认的显式类型注释。adc_instance: impl crate::peripheral::Peripheral<P = ADCI> + 'danalog

如果 rust 不知道什么是模拟,为什么没有编译错误?它是什么类型?

Rust 嵌入式 HAL 外设

评论

0赞 Finomnis 8/20/2023
需要更多上下文。有哪些相关的板条箱?是什么类型? 可悲的是,在嵌入式世界中并不是很独特。peripherals.APB_SARADCADC
0赞 kmdreko 8/20/2023
第一个链接似乎使用 stm32f4xx-hal crate,而第二个链接(和您的代码)似乎使用 esp32c3-hal crate。让我感到困惑,也许你也感到困惑。

答:

2赞 kmdreko 8/20/2023 #1

如果您使用的是 esp32c3-hal crate,则通过 trait 在类型上提供 .split()。生成的类型为 AvailableAnalogAPB_SARADCSarAdcExtanalog

很难说为什么 rust-analyzer 在推断类型时会遇到问题,但编译器应该被信任,所以你的代码显然没有类型问题。