rust 将嵌入式hal引脚定义提取到单独的文件中

9fkzdhlc  于 6个月前  发布在  其他
关注(0)|答案(1)|浏览(64)

我想使我的项目的引脚布局可配置和提取到一个单独的模块所有引脚数定义。
我不能擦除所有引脚,因为我仍然想利用embedded-hal的自动引脚检查,例如在设置SPI/定时器引脚时。
到目前为止,我已经想出了:

# in hardware_config.rs
 
pub struct AllGpio {
    pub a: hal::gpio::gpioa::Parts,
    pub b: hal::gpio::gpiob::Parts,
    pub c: hal::gpio::gpioc::Parts,
}

#[macro_export]
macro_rules! display_rst_pin {
    ($gpio:ident) => {
        $gpio.a.pa11
    };
}

#[macro_export]
macro_rules! display_sclk_pin {
    ($gpio:ident) => {
        $gpio.a.pa5
    };
}

<...more>

个字符
但是这里的宏定义非常冗长,有没有更简洁的方法来做到这一点?

w8rqjzmb

w8rqjzmb1#

我最终使用了这个元宏:

pub struct AllGpio {
    pub a: hal::gpio::gpioa::Parts,
    pub b: hal::gpio::gpiob::Parts,
    pub c: hal::gpio::gpioc::Parts,
}

#[rustfmt::skip]
macro_rules! pin_macro {
    ($d:tt $name:ident, $gpio:ident, $pin:ident) => {
        #[macro_export]
        macro_rules! $name {
            ($d gpio:ident) => {
                $d gpio. $gpio . $pin
            };
        }

        pub use $name;
    };
}

pin_macro!($ display_dc_pin, a, pa8);
pin_macro!($ display_rst_pin, a, pa10);
pin_macro!($ display_sclk_pin, a, pa5);
pin_macro!($ display_miso_pin, a, pa6);

// ----

let mut dc_pin = hw::display_dc_pin!(gpio).into_push_pull_output();
let mut rst_pin = hw::display_rst_pin!(gpio).into_push_pull_output();

字符串

相关问题