#pin #gpio-pin #embedded-hal #shared #gpio #periphereal

no-std shared-pin

用于在函数间共享Rust嵌入式_hal引脚的抽象

1个不稳定版本

0.1.0 2023年9月11日

#1180 in 嵌入式开发

Apache-2.0

7KB
50

嵌入式Rust共享引脚抽象

crates.io Docs Rust

这是一个简单的嵌入式Rust应用程序抽象,用于在函数间共享引脚。它使用一个Rc<RefCell<Pin>>来共享embedded_hal::digital::v2引脚。
应该可以传递给任何期望OutputPin或InputPin的函数

示例

将此内容放入您的cargo.toml

[dependencies]
shared-bus = "0.1.0"

导入

use embedded_hal::digital::v2::OutputPin;
use shared_pin::SharedPin;

定义


pub fn do_something_with_the_cloned_pin<PIN>(pin: PIN)
    where PIN: OuputPin
{
    pin.set_high();
    // ...
}

pub struct Device<PIN> {
    pin: PIN,
}

impl<PIN> Device<PIN>
    where
        PIN: OutputPin {
    pub fn new(pin: PIN) -> Self {
        Self {
            pin: PIN,
        }
    }
}

用法

{
    let mut shared_output_pin_1 = SharedPin::new(output_pin);
    let mut shared_output_pin_2 = shared_output_pin_1.clone();
    let mut shared_output_pin_3 = shared_output_pin_1.clone();
    do_something_with_the_cloned_pin(shared_output_pin_2);
    let mut device = Device::new(shared_output_pin_3);
    device.pin.set_low();
    
    let mut shared_input_pin_1 = SharedPin::new(input_pin);
    let mut shared_input_pin_2 = shared_input_pin_1.clone();
    let mut shared_input_pin_3 = shared_input_pin_1.clone();
    
    if shared_input_pin_3.is_low() {
        // ...
    }
}

待办事项

  • 为freeRTOS免费提供线程安全

依赖关系

~71KB