xwrust/
lib.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
//! XWOS RUST
//! ========
//!
//! # 简介
//!
//! XWOS RUST是Rust语言 `#![no_std]` 环境下的XWOS框架,可让用户使用RUST语言开发RTOS的应用。
//!
//! 在编写XWOS RUST时,作者充分阅读并参考了RUST语言std库的代码,尽量仿照std库的形式提供API。
//!
//!
//! 传统RUST程序的入口是 `main.rs` 的 `fn main()` ,
//! XWOS RUST的入口是 `pub unsafe extern "C" fn xwrust_main()` 。
//!
//!
//! 编写XWOS RUST的应用时,需要以下步骤:
//!
//! + 1. 在工程目录(例如电路板模块 `bm` 文件夹 或 `$(OEM)` 文件夹)建立一个独立的 [**玄武模块**](../../Docs/TechRefManual/BuildSystem/#玄武模块) ,
//!   并创建 `makefile` 。
//!
//! ```makefile
//! include $(XWOS_WKSPC_DIR)/XWOS.cfg
//! include xwbs/functions.mk
//! include xwbs/xwmo.rust.mk
//! ```
//!
//! + 2. 创建 `Cargo.toml` 。
//!
//! ```toml
//! [package]
//! name = "rustapp"
//! version = "0.1.0"
//! edition = "2021"
//!
//! [lib]
//! name = "rustapp"
//! crate-type = ["staticlib"]
//!
//! [dependencies]
//! cortex-m = "0.7"
//! xwrust = {path = "../../../../xwmd/xwrust"}
//! ```
//!
//! + 3. 创建 `.cargo/config.toml` 。
//!
//! ```toml
//! [build]
//! rustflags = [
//!  "--cfg", "unix",
//!  "--cfg", "target_env=\"newlib\"",
//! ]
//! target-dir = "target"
//!
//! [unstable]
//! build-std = ["core", "alloc"]
//! ```
//!
//! + 4. 在 `src/lib.rs` 中实现 `pub unsafe extern "C" fn xwrust_main()` 。
//!
//! ```rust
//! #![no_std]
//!
//! use xwrust::xwmm::allocator::AllocatorMempool;
//!
//! #[global_allocator]
//! pub static GLOBAL_ALLOCATOR: AllocatorMempool = AllocatorMempool;
//!
//! #[no_mangle]
//! pub unsafe extern "C" fn xwrust_main() {
//!     // 用户代码
//! }
//! ```
//!
//! + 5. 在XWOS的C语言入口 `xwos_main()` 中创建一个线程来调用 `xwrust_main()` 。
//!
//! ```C
//! extern void xwrust_main(void);
//! xwer_t xwrust_task(void * arg);
//!
//! xwos_thd_d xwrust_thd;
//! xwer_t xwos_main(void)
//! {
//!         struct xwos_thd_attr attr;
//!
//!         xwos_thd_attr_init(&attr);
//!         attr.name = "xwrust.thd";
//!         attr.stack = NULL;
//!         attr.stack_size = 8192;
//!         attr.priority = XWRUST_THD_PRIORITY;
//!         attr.detached = true;
//!         attr.privileged = true;
//!         xwos_thd_create(&xwrust_thd, &attr, xwrust_task, NULL);
//! }
//!
//! xwer_t xwrust_task(void * arg)
//! {
//!         xwrust_main();
//! }
//! ```
//!
//!
//! # XWOS RUST 的功能
//!
//! XWOS RUST提供了RTOS的基本功能:
//!
//! + [内存管理](crate::xwmm)
//!   + [全局内存分配器](crate::xwmm::allocator)
//! + [调度器](crate::xwos::skd)
//! + [电源管理](crate::xwos::pm)
//! + [线程](crate::xwos::thd)
//! + [软件定时器](crate::xwos::swt)
//! + [锁](crate::xwos::lock)
//!   + [互斥锁](crate::xwos::lock::mtx)
//!   + [自旋锁](crate::xwos::lock::spinlock)
//!   + [顺序锁](crate::xwos::lock::seqlock)
//! + [同步机制](crate::xwos::sync)
//!   + [信号量](crate::xwos::sync::sem)
//!   + [条件量](crate::xwos::sync::cond)
//!   + [事件标志](crate::xwos::sync::flg)
//!   + [线程栅栏](crate::xwos::sync::br)
//!   + [信号选择器](crate::xwos::sync::sel)
//! + 线程间通讯
//!   + [消息队列](crate::xwmd::xwmq)
//!   + [循环队列](crate::xwmd::xwcq)
//! + 其他
//!   + [时间](crate::xwtm)
//!   + [类型](crate::types)
//!   + [错误码](crate::errno)
//!   + [位图](crate::xwbmp)
//!
//! XWOS RUST所有功能都提供了 [`static`] 创建的方法,如果不使用 [`Arc<T>`], [`Box<T>`] 等,
//! 即可实现完全静态内存分配的代码。
//!
//!
//! # 返回XWOS首页
//!
//! [**XWOS首页**](/)
//!
//!
//! [`static`]: <https://doc.rust-lang.org/std/keyword.static.html>
//! [`Box<T>`]: <https://doc.rust-lang.org/alloc/boxed/struct.Box.html>
//! [`Arc<T>`]: <https://doc.rust-lang.org/alloc/sync/struct.Arc.html>

#![no_std]
#![feature(alloc_error_handler)]
#![feature(negative_impls)]
#![feature(generic_const_exprs)]
#![allow(incomplete_features)]

pub mod cfg;

#[macro_use]
pub mod macros;

pub mod types;

pub mod errno;

pub mod panic;

#[allow(dead_code)]
pub mod xwbmp;

pub mod xwtm;

pub mod xwmm;

#[allow(dead_code)]
pub mod xwos;

#[allow(dead_code)]
pub mod xwmd;

#[macro_use]
pub mod xwds;