提问人:Jason Kleban 提问时间:8/20/2023 更新时间:8/20/2023 访问量:43
什么类型是“外围设备”。APB_SARADC.split()'?
What type is `peripherals.APB_SARADC.split()`?
问:
在揭开神秘面纱中.分裂。。和 .. 使用 ADC 博客:
// Promote ADC peripheral to HAL-level Struct
let analog = peripherals.APB_SARADC.split();
但是我无法弄清楚返回类型是什么,甚至无法确定它使用的定义是什么。rust-analyzer 没有工具提示和“未找到 ”“ 的类型定义。工具提示只是说..split()
split
split
analog
let 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> + 'd
analog
如果 rust 不知道什么是模拟,为什么没有编译错误?它是什么类型?
答:
2赞
kmdreko
8/20/2023
#1
如果您使用的是 esp32c3-hal crate,则通过 trait 在类型上提供 .split()。
生成的类型为 AvailableAnalog
。APB_SARADC
SarAdcExt
analog
很难说为什么 rust-analyzer 在推断类型时会遇到问题,但编译器应该被信任,所以你的代码显然没有类型问题。
评论
peripherals.APB_SARADC
ADC