#virtual-memory #arceos #wrapper #address

no-std memory_addr

物理和虚拟地址的包装器和辅助函数

4个版本

0.2.1 2024年7月28日
0.2.0 2024年7月16日
0.1.1 2024年7月11日
0.1.0 2023年5月9日

#184 in 操作系统

Download history 26/week @ 2024-04-22 180/week @ 2024-04-29 281/week @ 2024-05-06 126/week @ 2024-05-13 29/week @ 2024-05-20 203/week @ 2024-05-27 219/week @ 2024-06-03 62/week @ 2024-06-10 151/week @ 2024-06-17 392/week @ 2024-06-24 163/week @ 2024-07-01 188/week @ 2024-07-08 395/week @ 2024-07-15 624/week @ 2024-07-22 1270/week @ 2024-07-29

2,486 每月下载量
3 crates 中使用

GPL-3.0-or-later OR Apache-2…

21KB
468

memory_addr

Crates.io Docs.rs CI

物理和虚拟内存地址的包装器和辅助函数。

示例

use memory_addr::{pa, va, va_range, PhysAddr, VirtAddr};

let phys_addr = PhysAddr::from(0x12345678);
let virt_addr = VirtAddr::from(0x87654321);

assert_eq!(phys_addr.align_down(0x1000usize), pa!(0x12345000));
assert_eq!(phys_addr.align_offset_4k(), 0x678);
assert_eq!(virt_addr.align_up_4k(), va!(0x87655000));
assert!(!virt_addr.is_aligned_4k());
assert!(va!(0xabcedf0).is_aligned(16usize));

let va_range = va_range!(0x87654000..0x87655000);
assert_eq!(va_range.start, va!(0x87654000));
assert_eq!(va_range.size(), 0x1000);
assert!(va_range.contains(virt_addr));
assert!(va_range.contains_range(va_range!(virt_addr..virt_addr + 0x100)));
assert!(!va_range.contains_range(va_range!(virt_addr..virt_addr + 0x1000)));

无运行时依赖