5个版本
0.3.2 | 2021年2月13日 |
---|---|
0.3.1 | 2020年7月25日 |
0.3.0 | 2020年7月25日 |
0.2.1 | 2020年7月24日 |
0.2.0 | 2020年7月24日 |
在 嵌入式开发 中排名第 1537
每月下载量 31 次
在 ruduino 中使用
9KB
avr-delay
该库的目的是提供类似于Arduino库提供的AVR特定延迟例程。公开函数有
$AVR_CPU_FREQUENCY_HZ
此crate使用avr-config
crate来获取CPU频率。因此,在为AVR编译crate时需要设置AVR_CPU_FREQUENCY_HZ
环境变量。
示例
export AVR_CPU_FREQUENCY_HZ=16000000
cargo build -Z build-std=core --target avr-atmega328p.json --release
delay(count: u32)
是一个原始延迟循环。每个循环为4个周期。asm部分可以循环65536次。初始开销约为13个周期。每个外部循环的开销约为11个周期。
delay_us(us: u32)
delay us 微秒
delay_ms(ms: u32)
delay ms 毫秒
以下是使用它的简单示例。
Cargo.toml
[package]
name = "dlyblink"
version = "0.1.0"
authors = ["John Jorgensen"]
[dependencies]
arduino = "0.1"
avr_delay = { git = "https://github.com/avr-rust/delay" }
和你的main.rs
#![feature(asm, lang_items, unwind_attributes)]
#![no_std]
#![no_main]
extern crate arduino;
extern crate avr_delay;
use arduino::{DDRB, PORTB};
use core::ptr::write_volatile;
use avr_delay::{delay, delay_ms, delay_us};
#[no_mangle]
pub extern fn main() {
let mut out: u8 = 0x00;
unsafe { write_volatile(DDRB, 0xff) }
loop {
out = out ^ 0xff;
unsafe { write_volatile(PORTB, out) }
delay_ms(1000000);
}
}
// These do not need to be in a module, but we group them here for clarity.
pub mod std {
#[lang = "eh_personality"]
#[no_mangle]
pub unsafe extern "C" fn rust_eh_personality(_state: (), _exception_object: *mut (), _context: *mut ()) -> () {
}
#[lang = "panic_fmt"]
#[unwind]
pub extern fn rust_begin_panic(_msg: (), _file: &'static str, _line: u32) -> ! {
loop { }
}
}
没有尝试处理算术溢出。
依赖项
~1.5MB
~35K SLoC