元变量(metavariables)
是捕获内容的基本单元,可以作为变量使用。
和Rust变量相同,每个元变量需要给定一个类型。
支持的元变量类型如下:
block
:代码块,形如{ //..your code }
。expr
:表达式。ident
:标识符,或rust关键字。其中标识符又包括变量名、类型名等(所以任意单词都可以被视为ident
)item
:一个item
可以是一个函数定义、一个结构体、一个module、一个impl块,……lifetime
:生命周期(例如'a
,'static
,……)literal
:字面量。包括字符串字面量和数值字面量。meta
:包含在“attribute”(#[...]
)中的内容pat
:模式(pattern),至少为任意的[PatternNoTopAlt](根据Rust版本而有所不同)- 在2018和2015Edition中,
pat
完全等价于pat_param
- 2021Edition中
(以及以后的版本),pat
为 任何可以出现在match{ pat => ..., }
中的pat
- 在2018和2015Edition中,
pat_param
: a PatternNoTopAltpath
:路径(例如std::mem::replace
,transmute::<_, int>
,foo
, …)stmt
:一条语句,但实际上捕获的内容不包含末尾的;
(item语句除外)tt
:单个Token Treety
:某个类型vis
:可见性。例如pub
,pub(in crate)
,……
多道程序与分时多任务
流程
配置内核/用户栈
- 清空bss段
- 静态变量
- 初始化内核堆栈HEAP
- 初始化中断
- 载入程序,将程序的状态载入内核栈
- 程序状态:
- 中断上下文
- 32个8为寄存器
- x[2]保存程序的用户栈地址
- sstatus
- sepc寄存器
- 32个8为寄存器
- 中断上下文
- 程序状态:
- 启用时间片中断
- 目的:时间片轮转
- 开始启动第一个程序