Rust高级编程-macro rule

riscv csr

Posted by MetaNetworks on September 18, 2022
本页面总访问量
元变量(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
  • pat_param: a PatternNoTopAlt
  • path:路径(例如std::mem::replace, transmute::<_, int>foo, …)
  • stmt:一条语句,但实际上捕获的内容不包含末尾的;(item语句除外)
  • tt:单个Token Tree
  • ty:某个类型
  • vis:可见性。例如 pub, pub(in crate),……

多道程序与分时多任务

流程

配置内核/用户栈

  • 清空bss段
    • 静态变量
  • 初始化内核堆栈HEAP
  • 初始化中断
  • 载入程序,将程序的状态载入内核栈
    • 程序状态:
      • 中断上下文
        • 32个8为寄存器
          • x[2]保存程序的用户栈地址
        • sstatus
        • sepc寄存器
  • 启用时间片中断
    • 目的:时间片轮转
  • 开始启动第一个程序