νƒ€μž… μƒνƒœ νŒ¨ν„΄

#[entry]
fn main() -> ! {
    let p = Peripherals::take().unwrap();
    let gpio0 = p0::Parts::new(p.P0);

    let pin: P0_01<Disconnected> = gpio0.p0_01;

    // let gpio0_01_again = gpio0.p0_01; // 였λ₯˜κ°€ λ°œμƒν•˜μ—¬ μ΄λ™ν–ˆμŠ΅λ‹ˆλ‹€.
    let pin_input: P0_01<Input<Floating>> = pin.into_floating_input();
    if pin_input.is_high().unwrap() {
        // ...
    }
    let mut pin_output: P0_01<Output<OpenDrain>> = pin_input
        .into_open_drain_output(OpenDrainConfig::Disconnect0Standard1, Level::Low);
    pin_output.set_high().unwrap();
    // pin_input.is_high(); // 였λ₯˜κ°€ λ°œμƒν•˜μ—¬ μ΄λ™ν–ˆμŠ΅λ‹ˆλ‹€.

    let _pin2: P0_02<Output<OpenDrain>> = gpio0
        .p0_02
        .into_open_drain_output(OpenDrainConfig::Disconnect0Standard1, Level::Low);
    let _pin3: P0_03<Output<PushPull>> =
        gpio0.p0_03.into_push_pull_output(Level::Low);

    loop {}
}
  • 핀은 Copy λ˜λŠ” Clone을 κ΅¬ν˜„ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ 각각 ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ§Œ μ‘΄μž¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 핀을 포트 ꡬ쑰체 λ°–μœΌλ‘œ μ΄λ™ν•˜λ©΄ 아무도 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  • ν•€ ꡬ성을 λ³€κ²½ν•˜λ©΄ 이전 ν•€ μΈμŠ€ν„΄μŠ€κ°€ μ‚¬μš©λ˜λ―€λ‘œ 이후에 이전 μΈμŠ€ν„΄μŠ€λ₯Ό 계속 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  • κ°’ νƒ€μž…μ€ ν˜„μž¬ μƒνƒœλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 이 κ²½μš°μ—λŠ” GPIO ν•€μ˜ ꡬ성 μƒνƒœμž…λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μƒνƒœ 머신이 νƒ€μž… μ‹œμŠ€ν…œμœΌλ‘œ μΈμ½”λ”©λ˜λ©°, λ¨Όμ € μ˜¬λ°”λ₯΄κ²Œ κ΅¬μ„±ν•œ ν›„ νŠΉμ • λ°©μ‹μœΌλ‘œ 핀을 μ‚¬μš©ν•˜λ„λ‘ ν•©λ‹ˆλ‹€. 잘λͺ»λœ μƒνƒœ μ „ν™˜μ€ 컴파일 μ‹œκ°„μ— ν¬μ°©λ©λ‹ˆλ‹€.
  • μž…λ ₯ ν•€μ—μ„œ is_highλ₯Ό ν˜ΈμΆœν•˜κ³  좜λ ₯ ν•€μ—μ„œ set_highλ₯Ό ν˜ΈμΆœν•  수 μžˆμ§€λ§Œ κ·Έ λ°˜λŒ€λ‘œλŠ” μ•ˆ λ©λ‹ˆλ‹€.
  • λ§Žμ€ HAL ν¬λ ˆμ΄νŠΈλ“€μ΄ 이 νŒ¨ν„΄μ„ λ”°λ¦…λ‹ˆλ‹€.