rust--顶级高手系列--Structs

8 月 12 日
阅读 6 分钟
190
alloc::AllocError //主要用于在分配内存时,告知调用者分配失败的原因//Rust 标准库中的全局分配器,它实现了 GlobalAlloc trait,是默认启用的分配器。alloc::Globalalloc::Layout //描述内存块的大小和对齐方式,是分配内存时的关键参数。//表示创建无效 Layout 时出现的错误,通常用于描述不合法的内存布局(如非 2 ...

rust--顶级高手系列--future

8 月 12 日
阅读 7 分钟
196
创建futureawait 关键字用于等待 Future 完成并获取其结果。 {代码...} 同时等待多个 Future完成 {代码...} 当一个 Future 完成后执行下一个操作: {代码...} 捕获错误并处理 {代码...} 超时限制 {代码...} 多个Future的选择和竞赛有时你希望同时启动多个 Future,并处理第一个完成的那个。 {代码...} 定时任务 {代码......

rust--顶级高手系列--ptr

8 月 12 日
阅读 8 分钟
183
Rust 中的指针类型主要包括以下几类:引用、原始指针、智能指针。瘦指针是一个普通的指针,仅包含内存地址。const T 和 mut T 这类原始指针,以及普通的引用 &T 和 &mut T 都是瘦指针。 {代码...} 胖指针包含的不仅是内存地址,还包含额外的元数据。胖指针主要用于以下两种情况:切片(Slice):切片是动态大小类型(DST...

rust--顶级高手系列--函数部分

8 月 12 日
阅读 17 分钟
260
rust 都有啥函数部分:(字母排序)Aalloc::alloc //根据给定的布局分配一块内存。 {代码...} alloc::alloc_zeroed //给定的布局分配一块内存,并且将这块内存初始化为 0。alloc::dealloc //函数释放之前由 alloc 或 alloc_zeroed 分配的一块内存。 {代码...} alloc::handle_alloc_erroralloc::realloc //重新分配一块内...

rust解惑--clone和copy联系和区别

8 月 3 日
阅读 1 分钟
490
联系Copy 是 Clone 的子集,一个类型实现了 Copy 特性时,编译器会自动提供相应的 Clone 实现。Clone 则提供了一种灵活但更高成本的深拷贝方式Copy 提供了一种低成本的复制方式Clone 特性Clone是一种明确且通用的深拷贝操作。实现Clone的类型可以通过调用clone方法创建该类型的深拷贝。深拷贝意味着会复制整个结构体或其...

rust--函数

8 月 3 日
阅读 7 分钟
213
字符串处理函数 (String Handling)String::newString::fromString::with_capacityString::capacityString::clearString::push_strString::pushString::resizeString::truncateString::popString::insertString::splitString::split_whitespaceString::split_terminatorstr::trimstr::trim_leftstr::trim_rightstr::conta...

rust--Arc

8 月 3 日
阅读 2 分钟
255
Rust 标准库中提供的一种线程安全的引用计数智能指针类型,位于 std::sync 模块中。Arc 的主要用途是在多线程环境下安全地共享不可变数据。 Arc 实现了内部共享对象的引用计数,当也只有当引用计数为零时,才会释放该对象。

rust--迭代器

8 月 2 日
阅读 1 分钟
217
Iterator 定义了一个迭代器,专注于迭代行为本身:你需要实现 next 方法来定义如何产生下一个元素。使用上下文:当你已经拥有一个迭代器并希望对其进行操作(例如在方法链中、手动调用 next 等)。

rust--Deref/DerefMut

8 月 2 日
阅读 1 分钟
187
用CustomSmartPointer包装了一下,相当直接调用String的方法 {代码...}

rust--option

8 月 2 日
阅读 2 分钟
173
Optionunwrap_or_else 接收一个FnOnce。FnOnce 特性代表可以被调用一次并且消耗捕获变量的闭包或函数。所有的闭包至少实现了 FnOnce,因为所有闭包都可以被调用一次。FnMut: 可修改捕获环境且多次调用闭包。Fn: 仅对捕获环境不可变访问且多次调用。

rust--trait

8 月 2 日
阅读 9 分钟
182
序列和迭代器 (Sequences and Iterators)IteratorIntoIterator//实现了 DoubleEndedIterator 特性的迭代器不仅可以从前向后遍历,还可以从后向前遍历。DoubleEndedIterator//实现了 ExactSizeIterator 特性的迭代器必须实现 len 方法,返回迭代器中剩余项的数量。ExactSizeIteratorExtend

rust--工具类

8 月 2 日
阅读 9 分钟
185
错误处理 (Error Handling)std::error::Errorstd::panic::catech_unwindstd::panic::AssertUnwindSafe

rust 大部分场景--生命周期的长短问题

7 月 29 日
阅读 2 分钟
160
方案一:将字段类型改为 String将 name 字段的类型从 &'static str 改为 String,这样可以拥有字符串数据,避免生命周期问题。

rust --PartialEq/Eq/PartialOrd/Ord/Hash

7 月 29 日
阅读 2 分钟
283
PartialEq 特性PartialEq 提供了对部分相等性的支持。实现了 PartialEq 特性的类型可以使用 == 和 != 操作符来进行比较。这是一个基础的特性,用于检查两个值是否相等或不相等。

rust+risc-v 操作系统怎么加载用户的应用的呢?

7 月 14 日
阅读 3 分钟
183
肯定是你约定一个地方, 我去那个地方找你。没有开启分页之前,都是用物理地址。 直接写死一个地址就行了。 开启分页之后, 也可以写死。但是,不同的是, 分页就像y=f(x)。 把同一个BASE_ADDRESS ,映射成不同的地址。所有大家还是不会冲突的。

risc-v 内存分配

7 月 12 日
阅读 4 分钟
183
全局的初始化 {代码...} KERNEL_SPACE初始化,主要是各个段的映射, 恒等映射的方式 {代码...} map_trampoline 映射稍微有些特殊: {代码...} TRAMPOLINE:一个虚拟地址 {代码...} strampoline 是内核结束之后的一个物理地址 {代码...}

rust --bitflags 库使用

7 月 12 日
阅读 1 分钟
261
{代码...}

risc-v--多任务切换原理

7 月 12 日
阅读 2 分钟
203
把当前寄存器的内容, 存到当前任务的内存里面。 把下一个任务的数据加载到寄存器。尤其注意 ra 寄存器ret 就是切换到触发,将跳转到ra哪里。

risc-v+rust-- 加载用户的app的底层原理?

7 月 12 日
阅读 5 分钟
187
文章写的有点墨迹, 我在梳理梳理一下, 其实,就是一个技巧: 内核栈里面放入的是用户态的数据。还有一点, 用户的程序放到一个位置, 内核去这个位置读取数据

risc-v --全部的关键字

7 月 11 日
阅读 2 分钟
366
.ascii:插入一串不以零结尾的字符。.asciz:插入一串以零结尾的字符。.balign:在当前位置插入字节以使地址对齐到指定的字节边界。.byte:插入一个或多个字节值。.data:转到数据段,通常用于定义数据信息。.define:通常用于定义宏或常量符号,但在不同汇编器中使用可能有所不同。.double:插入一个或多个双精度浮点数...

idea怎么配置risc-v语法高亮呢?

7 月 11 日
阅读 2 分钟
213
.align.data.endm.global.incbin.macro.quad.section.macro.endm.irp.irpc.if.else.else_if.endif.equ.equiv.fill.incbin.incdir.include.incdir.pushsection.popsection.repeat.size.type.val.ascii.asciz.balign.byte.data.define.double.extern.float.globl.global.hword.include.int.lcomm.local.long.org.quad.sect...

sbi--寄存器ID用法

7 月 11 日
阅读 1 分钟
174
//write_csr 这个宏通过使用Rust的宏机制生成一个内联、允许未使用变量并且不安全的函数 _write。这个函数将执行一个RISC-V特权指令,将某个值写入指定的CSR寄存器。

sbi--rustsbi解读

7 月 11 日
阅读 2 分钟
215
sbi-rt :按照sbi规范制定的接口,写的挺好的。这里直接调用了汇编代码sbi-spect: sbi-rt 里面用到一些常量sbi-testing:测试src: 不知道啥用。貌似某个学校写的玩具,还有第几章的字样, 不能严谨一点吗?到这里,还没有看到具体的实现呢? rust-qemu 能给qemu虚拟机直接用的。整体写的过于麻烦了,写的底层的也不是很容...

sbi--Hart 各种操作

7 月 10 日
阅读 3 分钟
207
各个状态流转的解释STARTED :HART 处于正常执行状态。转移到STOP_PENDING状态:当调用 sbi_hart_stop 之后,当前HART会请求停止。

sbi--sbi_remote_sfence

7 月 10 日
阅读 1 分钟
173
规范:Function NameSBI VersionFIDEIDsbi_remote_fence_i0.200x52464E43清除所有目标HART的指令缓存sbi_remote_sfence_vma0.210x52464E43使所有目标HART的虚拟内存地址范围失效sbi_remote_sfence_vma_asid0.220x52464E43使所有目标HART的虚拟内存地址范围和ASID失效sbi_remote_hfence_gvma_vmid0.230x52464E43使所有目...

sbi--sbi_send_ipi

7 月 10 日
阅读 1 分钟
154
每个位的位置对应一个HART ID。例如:第0位(最低位)对应HART 0第1位对应HART 1第2位对应HART 2如果你想指定HART 1,HART掩码将是0x2(二进制表示为0b10),因为第1位是1,其他位是0。

sbi--sbi_set_timer

7 月 10 日
阅读 1 分钟
161
{代码...}

sbi-- 最基础的调用

7 月 10 日
阅读 2 分钟
135
为啥是最基础的盗用, 相当于是自己内部的 {代码...}

sbi--底层原理以及调用规范(sbi_call)

7 月 10 日
阅读 2 分钟
184
用rust 实现规范的定义 {代码...} 怎么使用呢? {代码...} 调用返回值:0是成功, 失败都是负的,很多系统调用也是这样玩的

sbi(操作系统内核引导程序)--术语

7 月 10 日
阅读 2 分钟
187
硬件发现:ACPI可以帮助操作系统识别和配置硬件设备。这在传统PC(例如x86架构的计算机)上使用广泛,在RISC-V平台上,设备树(Device Tree)也是常用的方法。