mirror of
https://github.com/phil-opp/blog_os.git
synced 2025-12-16 14:27:49 +00:00
Import lazy_static through normal use
This commit is contained in:
@@ -478,7 +478,6 @@ Let's add the `lazy_static` crate to our project:
|
|||||||
```rust
|
```rust
|
||||||
// in src/main.rs
|
// in src/main.rs
|
||||||
|
|
||||||
#[macro_use]
|
|
||||||
extern crate lazy_static;
|
extern crate lazy_static;
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -490,13 +489,15 @@ version = "1.0"
|
|||||||
features = ["spin_no_std"]
|
features = ["spin_no_std"]
|
||||||
```
|
```
|
||||||
|
|
||||||
We need the `spin_no_std` feature, since we don't link the standard library. We also need the `#[macro_use]` attribute on the `extern crate` line to import the `lazy_static!` macro.
|
We need the `spin_no_std` feature, since we don't link the standard library.
|
||||||
|
|
||||||
With `lazy_static`, we can define our static `WRITER` without problems:
|
With `lazy_static`, we can define our static `WRITER` without problems:
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
// in src/vga_buffer.rs
|
// in src/vga_buffer.rs
|
||||||
|
|
||||||
|
use lazy_static::lazy_static;
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
pub static ref WRITER: Writer = Writer {
|
pub static ref WRITER: Writer = Writer {
|
||||||
column_position: 0,
|
column_position: 0,
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ mod serial;
|
|||||||
|
|
||||||
use uart_16550::SerialPort;
|
use uart_16550::SerialPort;
|
||||||
use spin::Mutex;
|
use spin::Mutex;
|
||||||
|
use lazy_static::lazy_static;
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
pub static ref SERIAL1: Mutex<SerialPort> = {
|
pub static ref SERIAL1: Mutex<SerialPort> = {
|
||||||
@@ -375,7 +376,6 @@ Cargo supports hybrid projects that are both a library and a binary. We only nee
|
|||||||
extern crate bootloader;
|
extern crate bootloader;
|
||||||
extern crate spin;
|
extern crate spin;
|
||||||
extern crate volatile;
|
extern crate volatile;
|
||||||
#[macro_use]
|
|
||||||
extern crate lazy_static;
|
extern crate lazy_static;
|
||||||
extern crate uart_16550;
|
extern crate uart_16550;
|
||||||
extern crate x86_64;
|
extern crate x86_64;
|
||||||
|
|||||||
@@ -382,6 +382,8 @@ We already imported the `lazy_static` crate when we [created an abstraction for
|
|||||||
```rust
|
```rust
|
||||||
// in src/interrupts.rs
|
// in src/interrupts.rs
|
||||||
|
|
||||||
|
use lazy_static::lazy_static;
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
static ref IDT: InterruptDescriptorTable = {
|
static ref IDT: InterruptDescriptorTable = {
|
||||||
let mut idt = InterruptDescriptorTable::new();
|
let mut idt = InterruptDescriptorTable::new();
|
||||||
|
|||||||
@@ -235,6 +235,7 @@ pub mod gdt;
|
|||||||
|
|
||||||
use x86_64::VirtAddr;
|
use x86_64::VirtAddr;
|
||||||
use x86_64::structures::tss::TaskStateSegment;
|
use x86_64::structures::tss::TaskStateSegment;
|
||||||
|
use lazy_static::lazy_static;
|
||||||
|
|
||||||
pub const DOUBLE_FAULT_IST_INDEX: u16 = 0;
|
pub const DOUBLE_FAULT_IST_INDEX: u16 = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
use x86_64::structures::gdt::{Descriptor, GlobalDescriptorTable, SegmentSelector};
|
use x86_64::structures::gdt::{Descriptor, GlobalDescriptorTable, SegmentSelector};
|
||||||
use x86_64::structures::tss::TaskStateSegment;
|
use x86_64::structures::tss::TaskStateSegment;
|
||||||
use x86_64::VirtAddr;
|
use x86_64::VirtAddr;
|
||||||
|
use lazy_static::lazy_static;
|
||||||
|
|
||||||
pub const DOUBLE_FAULT_IST_INDEX: u16 = 0;
|
pub const DOUBLE_FAULT_IST_INDEX: u16 = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ use gdt;
|
|||||||
use pic8259_simple::ChainedPics;
|
use pic8259_simple::ChainedPics;
|
||||||
use spin;
|
use spin;
|
||||||
use x86_64::structures::idt::{ExceptionStackFrame, InterruptDescriptorTable};
|
use x86_64::structures::idt::{ExceptionStackFrame, InterruptDescriptorTable};
|
||||||
|
use lazy_static::lazy_static;
|
||||||
|
|
||||||
pub const PIC_1_OFFSET: u8 = 32;
|
pub const PIC_1_OFFSET: u8 = 32;
|
||||||
pub const PIC_2_OFFSET: u8 = PIC_1_OFFSET + 8;
|
pub const PIC_2_OFFSET: u8 = PIC_1_OFFSET + 8;
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
extern crate bootloader;
|
extern crate bootloader;
|
||||||
extern crate spin;
|
extern crate spin;
|
||||||
extern crate volatile;
|
extern crate volatile;
|
||||||
#[macro_use]
|
|
||||||
extern crate lazy_static;
|
extern crate lazy_static;
|
||||||
extern crate pic8259_simple;
|
extern crate pic8259_simple;
|
||||||
extern crate uart_16550;
|
extern crate uart_16550;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
use spin::Mutex;
|
use spin::Mutex;
|
||||||
use uart_16550::SerialPort;
|
use uart_16550::SerialPort;
|
||||||
|
use lazy_static::lazy_static;
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
pub static ref SERIAL1: Mutex<SerialPort> = {
|
pub static ref SERIAL1: Mutex<SerialPort> = {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
use core::fmt;
|
use core::fmt;
|
||||||
use spin::Mutex;
|
use spin::Mutex;
|
||||||
use volatile::Volatile;
|
use volatile::Volatile;
|
||||||
|
use lazy_static::lazy_static;
|
||||||
|
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
/// A global `Writer` instance that can be used for printing to the VGA text buffer.
|
/// A global `Writer` instance that can be used for printing to the VGA text buffer.
|
||||||
|
|||||||
Reference in New Issue
Block a user