Skip to content

Commit 78adaf0

Browse files
authored
Merge pull request #41 from Azathoth1729/main
update chapter1/3mini-rt-usrland.rst
2 parents c08e9fb + be81bd1 commit 78adaf0

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

guide/source/chapter1/3mini-rt-usrland.rst

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,11 +162,15 @@ Rust 的 core 库内建了以一系列帮助实现显示字符的基本 Trait
162162

163163
如果你觉得理解 Rust 宏有困难,把它当成黑盒就好!
164164

165+
学习rust宏的参考链接: `The Little Book of Rust Macros <https://veykril.github.io/tlborm/introduction.html>`_
166+
165167

166168
首先封装一下对 ``SYSCALL_WRITE`` 系统调用。
167169

168170
.. code-block:: rust
169171
172+
// os/src/main.rs
173+
170174
const SYSCALL_WRITE: usize = 64;
171175
172176
pub fn sys_write(fd: usize, buffer: &[u8]) -> isize {
@@ -178,6 +182,8 @@ Rust 的 core 库内建了以一系列帮助实现显示字符的基本 Trait
178182

179183
.. code-block:: rust
180184
185+
// os/src/console.rs
186+
181187
struct Stdout;
182188
183189
impl Write for Stdout {
@@ -196,20 +202,31 @@ Rust 的 core 库内建了以一系列帮助实现显示字符的基本 Trait
196202

197203
.. code-block:: rust
198204
199-
#[macro_export]
205+
// os/src/console.rs
206+
200207
macro_rules! print {
201208
($fmt: literal $(, $($arg: tt)+)?) => {
202209
$crate::console::print(format_args!($fmt $(, $($arg)+)?));
203210
}
204211
}
205212
206-
#[macro_export]
207213
macro_rules! println {
208214
($fmt: literal $(, $($arg: tt)+)?) => {
209-
print(format_args!(concat!($fmt, "\n") $(, $($arg)+)?));
215+
$crate::console::print(format_args!(concat!($fmt, "\n") $(, $($arg)+)?));
210216
}
211217
}
212218
219+
// os/src/main.rs
220+
221+
#![no_std]
222+
#![no_main]
223+
224+
#[macro_use]
225+
mod console;
226+
mod lang_items;
227+
228+
...
229+
213230
接下来,我们调整一下应用程序,让它发出显示字符串和退出的请求:
214231

215232
.. code-block:: rust

0 commit comments

Comments
 (0)