From a6f314ee083bf8d4e5f03b3dd58e36511cd84391 Mon Sep 17 00:00:00 2001 From: chenyingchun0312 Date: Mon, 6 Sep 2021 21:03:08 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E3=80=90=E6=96=B0=E5=A2=9E=E3=80=91RISC-V?= =?UTF-8?q?=20=E5=86=85=E6=A0=B8=E7=A7=BB=E6=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../figures/image-20210906072500749.png | Bin 0 -> 59390 bytes .../figures/image-20210906075256925.png | Bin 0 -> 74661 bytes .../figures/image-20210906080637834.png | Bin 0 -> 22815 bytes .../porting/risc-v/port-risc-v.md | 487 ++++++++++++++++++ 4 files changed, 487 insertions(+) create mode 100644 rt-thread-version/rt-thread-standard/application-note/porting/risc-v/figures/image-20210906072500749.png create mode 100644 rt-thread-version/rt-thread-standard/application-note/porting/risc-v/figures/image-20210906075256925.png create mode 100644 rt-thread-version/rt-thread-standard/application-note/porting/risc-v/figures/image-20210906080637834.png create mode 100644 rt-thread-version/rt-thread-standard/application-note/porting/risc-v/port-risc-v.md diff --git a/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/figures/image-20210906072500749.png b/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/figures/image-20210906072500749.png new file mode 100644 index 0000000000000000000000000000000000000000..a03ab9bd10ca33410dba5b91763719378a8f40ad GIT binary patch literal 59390 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 BD{lY* literal 0 HcmV?d00001 diff --git a/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/figures/image-20210906075256925.png b/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/figures/image-20210906075256925.png new file mode 100644 index 0000000000000000000000000000000000000000..38993ffcb6d8a672779634e33ca67e8029db67fc GIT binary patch literal 74661 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 literal 0 HcmV?d00001 diff --git a/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/figures/image-20210906080637834.png b/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/figures/image-20210906080637834.png new file mode 100644 index 0000000000000000000000000000000000000000..1a7c6dc3b2337e156674e42632c3408ccad554e9 GIT binary patch literal 22815 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 = (rt_ubase_t)texit; // ra 寄存器相当于ARM中的LR寄存器,存放函数返回时,PC的地址 + frame->a0 = (rt_ubase_t)parameter; // a0 存放参数 + frame->epc = (rt_ubase_t)tentry; // epc 用来存放线程入口函数 + + /* force to machine mode(MPP=11) and set MPIE to 1 */ + frame->mstatus = 0x00007880; // 设置MPP=1,强制当前内核处于machine mode + + return stk; +} +``` + + + +#### 实现上下文切换 + +一般在CM3等架构下,我们习惯在任务切换函数中,触发PendSV中断,然后在PendSV处理函数中实现上下文切换,在RISC-V架构中,可以使用Software interrupt来替换PendSV,也可以不使用Software interrupt,直接在任务切换函数中,进行上下文的切换,`rt-thread libcpu/risc-v/common/`下任务切换的实现,其实使用的是方法二,即**直接在任务切换函数中,直接进行上下文切换**,而没有使用Software interrupt,主要原因是: + +1. 使用Software interrupt模式,代码处理起来会别扭一些,特别是在使用Software interrupt并没有特别性能提升的时候,可能更没有必要 +2. 目前已知的一些RISC-V并没有硬件自动压栈,出栈一些CPU寄存器,相比PendSV硬件上可以自动压栈,出栈 +3. 其实CM3中使用PendSV做任务切换,也并不是架构强制要求的,只是鼓励RTOS这么使用,RTOS也可以完全不实用PendSV来做任务切换,是否这么做,完全取决于RTOS如何实现 + +当然,也可以使用Software interrupt来做任务切换, `libcpu/risc-v/nuclei` 这里的内核移植,就是使用了Software interrupt来做任务切换的 + +##### rt_hw_context_switch_to + +`rt_hw_context_switch_to` 主要是在第一次切换到新的线程时使用到,第一次线程切换时,是没有from线程的,只有to线程 + +```assembly +/* + * #ifdef RT_USING_SMP + * void rt_hw_context_switch_to(rt_ubase_t to, stuct rt_thread *to_thread); + * #else + * void rt_hw_context_switch_to(rt_ubase_t to); + * #endif + * a0 --> to + * a1 --> to_thread + */ + .globl rt_hw_context_switch_to +rt_hw_context_switch_to: + LOAD sp, (a0) /* 将to线程的sp指针赋值给CPU的sp*/ + +#ifdef RT_USING_SMP + mv a0, a1 + call rt_cpus_lock_status_restore +#endif + /* 将sp的值加上2个寄存器位宽(32位架构中,寄存器位宽为4字节),然后将地址中的内容取出来赋值给a0, + * 其实这里的a0就是to线程当前的mstatus, 恢复to线程的mstatus + */ + LOAD a0, 2 * REGBYTES(sp) + + /* 将to线程的mstatus写入CPU的mstatus寄存器中 */ + csrw mstatus, a0 + j rt_hw_context_switch_exit /* 该函数实现了下文的恢复(to线程的相关状态恢复到CPU寄存器中) */ +``` + + + +```assembly +.global rt_hw_context_switch_exit +rt_hw_context_switch_exit: +#ifdef RT_USING_SMP +#ifdef RT_USING_SIGNALS + mv a0, sp + + csrr t0, mhartid + /* switch interrupt stack of current cpu */ + la sp, __stack_start__ + addi t1, t0, 1 + li t2, __STACKSIZE__ + mul t1, t1, t2 + add sp, sp, t1 /* sp = (cpuid + 1) * __STACKSIZE__ + __stack_start__ */ + + call rt_signal_check + mv sp, a0 +#endif +#endif + /* + * 将sp指向的地址,偏移0个寄存器位宽,并将其中的值,取出来,赋值给a0 + */ + /* resw ra to mepc */ + LOAD a0, 0 * REGBYTES(sp) + csrw mepc, a0 + + /* 恢复to线程的 x1(ra)寄存器 */ + LOAD x1, 1 * REGBYTES(sp) + + li t0, 0x00007800 + csrw mstatus, t0 + LOAD a0, 2 * REGBYTES(sp) + csrs mstatus, a0 + + /* 恢复to 线程其他寄存器值 */ + LOAD x4, 4 * REGBYTES(sp) + LOAD x5, 5 * REGBYTES(sp) + LOAD x6, 6 * REGBYTES(sp) + LOAD x7, 7 * REGBYTES(sp) + LOAD x8, 8 * REGBYTES(sp) + LOAD x9, 9 * REGBYTES(sp) + LOAD x10, 10 * REGBYTES(sp) + LOAD x11, 11 * REGBYTES(sp) + LOAD x12, 12 * REGBYTES(sp) + LOAD x13, 13 * REGBYTES(sp) + LOAD x14, 14 * REGBYTES(sp) + LOAD x15, 15 * REGBYTES(sp) + LOAD x16, 16 * REGBYTES(sp) + LOAD x17, 17 * REGBYTES(sp) + LOAD x18, 18 * REGBYTES(sp) + LOAD x19, 19 * REGBYTES(sp) + LOAD x20, 20 * REGBYTES(sp) + LOAD x21, 21 * REGBYTES(sp) + LOAD x22, 22 * REGBYTES(sp) + LOAD x23, 23 * REGBYTES(sp) + LOAD x24, 24 * REGBYTES(sp) + LOAD x25, 25 * REGBYTES(sp) + LOAD x26, 26 * REGBYTES(sp) + LOAD x27, 27 * REGBYTES(sp) + LOAD x28, 28 * REGBYTES(sp) + LOAD x29, 29 * REGBYTES(sp) + LOAD x30, 30 * REGBYTES(sp) + LOAD x31, 31 * REGBYTES(sp) + + addi sp, sp, 32 * REGBYTES + +#ifdef ARCH_RISCV_FPU + FLOAD f0, 0 * FREGBYTES(sp) + FLOAD f1, 1 * FREGBYTES(sp) + FLOAD f2, 2 * FREGBYTES(sp) + FLOAD f3, 3 * FREGBYTES(sp) + FLOAD f4, 4 * FREGBYTES(sp) + FLOAD f5, 5 * FREGBYTES(sp) + FLOAD f6, 6 * FREGBYTES(sp) + FLOAD f7, 7 * FREGBYTES(sp) + FLOAD f8, 8 * FREGBYTES(sp) + FLOAD f9, 9 * FREGBYTES(sp) + FLOAD f10, 10 * FREGBYTES(sp) + FLOAD f11, 11 * FREGBYTES(sp) + FLOAD f12, 12 * FREGBYTES(sp) + FLOAD f13, 13 * FREGBYTES(sp) + FLOAD f14, 14 * FREGBYTES(sp) + FLOAD f15, 15 * FREGBYTES(sp) + FLOAD f16, 16 * FREGBYTES(sp) + FLOAD f17, 17 * FREGBYTES(sp) + FLOAD f18, 18 * FREGBYTES(sp) + FLOAD f19, 19 * FREGBYTES(sp) + FLOAD f20, 20 * FREGBYTES(sp) + FLOAD f21, 21 * FREGBYTES(sp) + FLOAD f22, 22 * FREGBYTES(sp) + FLOAD f23, 23 * FREGBYTES(sp) + FLOAD f24, 24 * FREGBYTES(sp) + FLOAD f25, 25 * FREGBYTES(sp) + FLOAD f26, 26 * FREGBYTES(sp) + FLOAD f27, 27 * FREGBYTES(sp) + FLOAD f28, 28 * FREGBYTES(sp) + FLOAD f29, 29 * FREGBYTES(sp) + FLOAD f30, 30 * FREGBYTES(sp) + FLOAD f31, 31 * FREGBYTES(sp) + + addi sp, sp, 32 * FREGBYTES +#endif + + mret +``` + + + +##### rt_hw_context_switch + +该函数用于在线程(而不是中断中)实现上下文切换 + +```assembly +/* + * #ifdef RT_USING_SMP + * void rt_hw_context_switch(rt_ubase_t from, rt_ubase_t to, struct rt_thread *to_thread); + * #else + * void rt_hw_context_switch(rt_ubase_t from, rt_ubase_t to); + * #endif + * + * a0 --> from a0 存放的是from线程的sp + * a1 --> to a1 存放的是to线程的sp + * a2 --> to_thread to_thread仅在使能了SMP功能后使用到 + */ + .globl rt_hw_context_switch +rt_hw_context_switch: + /* 保存from线程的状态到from线程的栈中 */ + /* saved from thread context + * x1/ra -> sp(0) + * x1/ra -> sp(1) + * mstatus.mie -> sp(2) + * x(i) -> sp(i-4) + */ +#ifdef ARCH_RISCV_FPU + addi sp, sp, -32 * FREGBYTES + + FSTORE f0, 0 * FREGBYTES(sp) + FSTORE f1, 1 * FREGBYTES(sp) + FSTORE f2, 2 * FREGBYTES(sp) + FSTORE f3, 3 * FREGBYTES(sp) + FSTORE f4, 4 * FREGBYTES(sp) + FSTORE f5, 5 * FREGBYTES(sp) + FSTORE f6, 6 * FREGBYTES(sp) + FSTORE f7, 7 * FREGBYTES(sp) + FSTORE f8, 8 * FREGBYTES(sp) + FSTORE f9, 9 * FREGBYTES(sp) + FSTORE f10, 10 * FREGBYTES(sp) + FSTORE f11, 11 * FREGBYTES(sp) + FSTORE f12, 12 * FREGBYTES(sp) + FSTORE f13, 13 * FREGBYTES(sp) + FSTORE f14, 14 * FREGBYTES(sp) + FSTORE f15, 15 * FREGBYTES(sp) + FSTORE f16, 16 * FREGBYTES(sp) + FSTORE f17, 17 * FREGBYTES(sp) + FSTORE f18, 18 * FREGBYTES(sp) + FSTORE f19, 19 * FREGBYTES(sp) + FSTORE f20, 20 * FREGBYTES(sp) + FSTORE f21, 21 * FREGBYTES(sp) + FSTORE f22, 22 * FREGBYTES(sp) + FSTORE f23, 23 * FREGBYTES(sp) + FSTORE f24, 24 * FREGBYTES(sp) + FSTORE f25, 25 * FREGBYTES(sp) + FSTORE f26, 26 * FREGBYTES(sp) + FSTORE f27, 27 * FREGBYTES(sp) + FSTORE f28, 28 * FREGBYTES(sp) + FSTORE f29, 29 * FREGBYTES(sp) + FSTORE f30, 30 * FREGBYTES(sp) + FSTORE f31, 31 * FREGBYTES(sp) + +#endif + addi sp, sp, -32 * REGBYTES + STORE sp, (a0) + + STORE x1, 0 * REGBYTES(sp) + STORE x1, 1 * REGBYTES(sp) + + csrr a0, mstatus + andi a0, a0, 8 + beqz a0, save_mpie + li a0, 0x80 +save_mpie: + STORE a0, 2 * REGBYTES(sp) + + STORE x4, 4 * REGBYTES(sp) + STORE x5, 5 * REGBYTES(sp) + STORE x6, 6 * REGBYTES(sp) + STORE x7, 7 * REGBYTES(sp) + STORE x8, 8 * REGBYTES(sp) + STORE x9, 9 * REGBYTES(sp) + STORE x10, 10 * REGBYTES(sp) + STORE x11, 11 * REGBYTES(sp) + STORE x12, 12 * REGBYTES(sp) + STORE x13, 13 * REGBYTES(sp) + STORE x14, 14 * REGBYTES(sp) + STORE x15, 15 * REGBYTES(sp) + STORE x16, 16 * REGBYTES(sp) + STORE x17, 17 * REGBYTES(sp) + STORE x18, 18 * REGBYTES(sp) + STORE x19, 19 * REGBYTES(sp) + STORE x20, 20 * REGBYTES(sp) + STORE x21, 21 * REGBYTES(sp) + STORE x22, 22 * REGBYTES(sp) + STORE x23, 23 * REGBYTES(sp) + STORE x24, 24 * REGBYTES(sp) + STORE x25, 25 * REGBYTES(sp) + STORE x26, 26 * REGBYTES(sp) + STORE x27, 27 * REGBYTES(sp) + STORE x28, 28 * REGBYTES(sp) + STORE x29, 29 * REGBYTES(sp) + STORE x30, 30 * REGBYTES(sp) + STORE x31, 31 * REGBYTES(sp) + + /* restore to thread context + * sp(0) -> epc; + * sp(1) -> ra; + * sp(i) -> x(i+2) + */ + LOAD sp, (a1) + +#ifdef RT_USING_SMP + mv a0, a2 + call rt_cpus_lock_status_restore +#endif /*RT_USING_SMP*/ + + /* 该函数实现了下文的恢复(to线程的相关状态恢复到CPU寄存器中) */ + j rt_hw_context_switch_exit +``` + + + +##### rt_hw_context_switch_interrupt + +在上下文实现,主要是在中断函数中进行调用,设置上下文切换的标志,然后在`irq_entry`中实现上下文的切换 + +```c +void rt_hw_context_switch_interrupt(rt_ubase_t from, rt_ubase_t to) +{ + if (rt_thread_switch_interrupt_flag == 0) + rt_interrupt_from_thread = from; + + rt_interrupt_to_thread = to; + rt_thread_switch_interrupt_flag = 1; + + return ; +} +``` + + + +#### 实现时钟节拍 + +要实现时间片轮转调度、软定时器、rt_thread_delay()等功能,必须要保证rt_tick_increase()被周期性调用。在RISC-V系列MCU中,可以使用内核timer实现 + +```C +/* System Tick Configuration */ +static void systick_config(rt_uint32_t ticks) { + /* set value */ + *(rt_uint64_t *) (TMR_CTRL_ADDR + TMR_MTIMECMP) = ticks; + /* enable interrupt */ + eclic_irq_enable(CLIC_INT_TMR, 0, 0); + /* clear value */ + *(rt_uint64_t *) (TMR_CTRL_ADDR + TMR_MTIME) = 0; +} +``` + +```c +/* This is the timer interrupt service routine. */ +void eclic_mtip_handler(void) { + /* clear value */ + *(rt_uint64_t *) (TMR_CTRL_ADDR + TMR_MTIME) = 0; + + /* enter interrupt */ + rt_interrupt_enter(); + /* tick increase */ + rt_tick_increase(); + + /* leave interrupt */ + rt_interrupt_leave(); +} +``` + + + + + +## 参考文档 + +[1] [文档中心-内核移植](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/porting/porting) + +[2] RISC-V-Reader-Chinese-v2p1.pdf + +[3] [野火®]《RT-Thread+内核实现与应用开发实战—基于STM32》.pdf + +[4] Bumblebee内核指令架构手册.pdf \ No newline at end of file -- Gitee From caa368d2055a3060e1ebfd4d6a73ecd67677928d Mon Sep 17 00:00:00 2001 From: chenyingchun0312 Date: Thu, 9 Sep 2021 09:17:29 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E3=80=90=E6=A0=BC=E5=BC=8F=E3=80=91?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=20vscode-pangu=20=E6=A0=BC=E5=BC=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../porting/risc-v/port-risc-v.md | 86 +++++++++---------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/port-risc-v.md b/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/port-risc-v.md index 9515f63..f419208 100644 --- a/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/port-risc-v.md +++ b/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/port-risc-v.md @@ -1,8 +1,8 @@ # RISC-V 移植 -## RISC-V简介 +## RISC-V 简介 -RISC-V (读作“RISC-FIVE”)是**基于精简指令集计算 (RISC)原理建立的开放 指令集架构** (ISA),V表示为第五代RISC (精简指令集计算机),表示此前已经四代RISC处理器原型芯片。 +RISC-V (读作 “RISC-FIVE”) 是 ** 基于精简指令集计算 (RISC)原理建立的开放 指令集架构 ** (ISA),V 表示为第五代 RISC (精简指令集计算机), 表示此前已经四代 RISC 处理器原型芯片。 @@ -14,11 +14,11 @@ RISC-V (读作“RISC-FIVE”)是**基于精简指令集计算 (RISC)原理建 - RT-Thread 的 libcpu 抽象层向下提供了一套统一的 CPU 架构移植接口,这部分接口包含了全局中断开关函数、线程上下文切换函数、时钟节拍的配置和中断函数、Cache 等等内容。下表是 CPU 架构移植需要实现的接口和变量。 -### RTOS内核移植 +### RTOS 内核移植 -RTOS内核移植一般需要实现如下功能,对接RTOS +RTOS 内核移植一般需要实现如下功能,对接 RTOS -- 中断使能/失能 +- 中断使能 / 失能 - 任务切换 - 中断处理 - 时钟节拍 @@ -26,9 +26,9 @@ RTOS内核移植一般需要实现如下功能,对接RTOS -### libcpu 移植相关 API介绍 +### libcpu 移植相关 API 介绍 -| **函数和变量** | **描述** | +| ** 函数和变量 ** | ** 描述 ** | | ------------------------------------------------------------ | ------------------------------------------------------------ | | rt_base_t rt_hw_interrupt_disable(void); | 关闭全局中断 | | void rt_hw_interrupt_enable(rt_base_t level); | 打开全局中断 | @@ -45,25 +45,25 @@ RTOS内核移植一般需要实现如下功能,对接RTOS ### RT-Thread RISC-V 内核架构介绍 -- 在RISC-V内核架构设计上,common文件夹一般来用存放的是不同RISC-V内核的通用任务切换代码,其他不同内核之间不一样的地方,使用单独的文件夹存放。 +- 在 RISC-V 内核架构设计上,common 文件夹一般来用存放的是不同 RISC-V 内核的通用任务切换代码,其他不同内核之间不一样的地方,使用单独的文件夹存放。 ![image-20210906072500749](figures/image-20210906072500749.png) -- 不同的RISC-V内核芯片,我们会发现一个很有意思的现象:任务切换代码经常有一些不一样的地方,比较碎片化,因此我们会发现,有时,很难比较统一的将任务切换代码都放在common文件夹中,查看libcpu\risc-v\SConscript文件,我们会发现,不同内核架构,有时无法使用common文件夹中的任务切换代码 +- 不同的 RISC-V 内核芯片,我们会发现一个很有意思的现象:任务切换代码经常有一些不一样的地方,比较碎片化,因此我们会发现,有时,很难比较统一的将任务切换代码都放在 common 文件夹中,查看 libcpu\risc-v\SConscript 文件,我们会发现,不同内核架构,有时无法使用 common 文件夹中的任务切换代码 ![image-20210906075256925](figures/image-20210906075256925.png) -### RT-Thread RISC-V 内核移植API实现 +### RT-Thread RISC-V 内核移植 API 实现 -内核移植的主要工作内容,主要就是实现上面libcpu移植相关的API,相关实现函数也位于上面提到的libcpu/risc-v文件夹中,因为不同的RISC-V内核,任务切换相关API实现也不完全一样,下面我们以`GD32FV103`芯片为例,将介绍一下,如何实现一个RISC-V内核架构的芯片移植工作。 +内核移植的主要工作内容,主要就是实现上面 libcpu 移植相关的 API,相关实现函数也位于上面提到的 libcpu/risc-v 文件夹中,因为不同的 RISC-V 内核,任务切换相关 API 实现也不完全一样,下面我们以 `GD32FV103` 芯片为例,将介绍一下,如何实现一个 RISC-V 内核架构的芯片移植工作。 -`GD32VF103`是 `bumblebee`内核,相关的内核移植API主要位于如下文件 夹中,接下来,我们依次介绍内核移植API的实现 +`GD32VF103` 是 `bumblebee` 内核,相关的内核移植 API 主要位于如下文件 夹中,接下来,我们依次介绍内核移植 API 的实现 ![image-20210906080637834](figures/image-20210906080637834.png) @@ -80,7 +80,7 @@ RTOS内核移植一般需要实现如下功能,对接RTOS */ .globl rt_hw_interrupt_disable rt_hw_interrupt_disable: - csrrci a0, mstatus, 8 /* 8表示mstatus的第3bit,即MIE字段,设置为0,关闭全局中断*/ + csrrci a0, mstatus, 8 /* 8 表示 mstatus 的第 3bit,即 MIE 字段,设置为 0,关闭全局中断 */ ret ``` @@ -91,11 +91,11 @@ rt_hw_interrupt_disable: ```assembly /* * void rt_hw_interrupt_enable(rt_base_t level); - * 恢复全局中断状态,a0为之前关闭中断时保存下的中断状态 + * 恢复全局中断状态,a0 为之前关闭中断时保存下的中断状态 */ .globl rt_hw_interrupt_enable rt_hw_interrupt_enable: - csrw mstatus, a0 /* 恢复之前的中断状态*/ + csrw mstatus, a0 /* 恢复之前的中断状态 */ ret ``` @@ -134,12 +134,12 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, ((rt_ubase_t *)frame)[i] = 0xdeadbeef; } - frame->ra = (rt_ubase_t)texit; // ra 寄存器相当于ARM中的LR寄存器,存放函数返回时,PC的地址 + frame->ra = (rt_ubase_t)texit; // ra 寄存器相当于 ARM 中的 LR 寄存器,存放函数返回时,PC 的地址 frame->a0 = (rt_ubase_t)parameter; // a0 存放参数 frame->epc = (rt_ubase_t)tentry; // epc 用来存放线程入口函数 /* force to machine mode(MPP=11) and set MPIE to 1 */ - frame->mstatus = 0x00007880; // 设置MPP=1,强制当前内核处于machine mode + frame->mstatus = 0x00007880; // 设置 MPP=1, 强制当前内核处于 machine mode return stk; } @@ -149,17 +149,17 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, #### 实现上下文切换 -一般在CM3等架构下,我们习惯在任务切换函数中,触发PendSV中断,然后在PendSV处理函数中实现上下文切换,在RISC-V架构中,可以使用Software interrupt来替换PendSV,也可以不使用Software interrupt,直接在任务切换函数中,进行上下文的切换,`rt-thread libcpu/risc-v/common/`下任务切换的实现,其实使用的是方法二,即**直接在任务切换函数中,直接进行上下文切换**,而没有使用Software interrupt,主要原因是: +一般在 CM3 等架构下,我们习惯在任务切换函数中,触发 PendSV 中断,然后在 PendSV 处理函数中实现上下文切换,在 RISC-V 架构中,可以使用 Software interrupt 来替换 PendSV,也可以不使用 Software interrupt,直接在任务切换函数中,进行上下文的切换,`rt-thread libcpu/risc-v/common/` 下任务切换的实现,其实使用的是方法二,即 ** 直接在任务切换函数中,直接进行上下文切换 **,而没有使用 Software interrupt,主要原因是: -1. 使用Software interrupt模式,代码处理起来会别扭一些,特别是在使用Software interrupt并没有特别性能提升的时候,可能更没有必要 -2. 目前已知的一些RISC-V并没有硬件自动压栈,出栈一些CPU寄存器,相比PendSV硬件上可以自动压栈,出栈 -3. 其实CM3中使用PendSV做任务切换,也并不是架构强制要求的,只是鼓励RTOS这么使用,RTOS也可以完全不实用PendSV来做任务切换,是否这么做,完全取决于RTOS如何实现 +1. 使用 Software interrupt 模式,代码处理起来会别扭一些,特别是在使用 Software interrupt 并没有特别性能提升的时候,可能更没有必要 +2. 目前已知的一些 RISC-V 并没有硬件自动压栈,出栈一些 CPU 寄存器,相比 PendSV 硬件上可以自动压栈,出栈 +3. 其实 CM3 中使用 PendSV 做任务切换,也并不是架构强制要求的, 只是鼓励 RTOS 这么使用,RTOS 也可以完全不实用 PendSV 来做任务切换,是否这么做,完全取决于 RTOS 如何实现 -当然,也可以使用Software interrupt来做任务切换, `libcpu/risc-v/nuclei` 这里的内核移植,就是使用了Software interrupt来做任务切换的 +当然,也可以使用 Software interrupt 来做任务切换, `libcpu/risc-v/nuclei` 这里的内核移植,就是使用了 Software interrupt 来做任务切换的 ##### rt_hw_context_switch_to -`rt_hw_context_switch_to` 主要是在第一次切换到新的线程时使用到,第一次线程切换时,是没有from线程的,只有to线程 +`rt_hw_context_switch_to` 主要是在第一次切换到新的线程时使用到,第一次线程切换时,是没有 from 线程的,只有 to 线程 ```assembly /* @@ -173,20 +173,20 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, */ .globl rt_hw_context_switch_to rt_hw_context_switch_to: - LOAD sp, (a0) /* 将to线程的sp指针赋值给CPU的sp*/ + LOAD sp, (a0) /* 将 to 线程的 sp 指针赋值给 CPU 的 sp*/ #ifdef RT_USING_SMP mv a0, a1 call rt_cpus_lock_status_restore #endif - /* 将sp的值加上2个寄存器位宽(32位架构中,寄存器位宽为4字节),然后将地址中的内容取出来赋值给a0, - * 其实这里的a0就是to线程当前的mstatus, 恢复to线程的mstatus + /* 将 sp 的值加上 2 个寄存器位宽(32 位架构中,寄存器位宽为 4 字节),然后将地址中的内容取出来赋值给 a0, + * 其实这里的 a0 就是 to 线程当前的 mstatus, 恢复 to 线程的 mstatus */ - LOAD a0, 2 * REGBYTES(sp) - - /* 将to线程的mstatus写入CPU的mstatus寄存器中 */ + LOAD a0, 2 * REGBYTES(sp) + + /* 将 to 线程的 mstatus 写入 CPU 的 mstatus 寄存器中 */ csrw mstatus, a0 - j rt_hw_context_switch_exit /* 该函数实现了下文的恢复(to线程的相关状态恢复到CPU寄存器中) */ + j rt_hw_context_switch_exit /* 该函数实现了下文的恢复(to 线程的相关状态恢复到 CPU 寄存器中) */ ``` @@ -211,13 +211,13 @@ rt_hw_context_switch_exit: #endif #endif /* - * 将sp指向的地址,偏移0个寄存器位宽,并将其中的值,取出来,赋值给a0 + * 将 sp 指向的地址,偏移 0 个寄存器位宽,并将其中的值,取出来,赋值给 a0 */ /* resw ra to mepc */ LOAD a0, 0 * REGBYTES(sp) csrw mepc, a0 - /* 恢复to线程的 x1(ra)寄存器 */ + /* 恢复 to 线程的 x1(ra) 寄存器 */ LOAD x1, 1 * REGBYTES(sp) li t0, 0x00007800 @@ -225,7 +225,7 @@ rt_hw_context_switch_exit: LOAD a0, 2 * REGBYTES(sp) csrs mstatus, a0 - /* 恢复to 线程其他寄存器值 */ + /* 恢复 to 线程其他寄存器值 */ LOAD x4, 4 * REGBYTES(sp) LOAD x5, 5 * REGBYTES(sp) LOAD x6, 6 * REGBYTES(sp) @@ -311,13 +311,13 @@ rt_hw_context_switch_exit: * void rt_hw_context_switch(rt_ubase_t from, rt_ubase_t to); * #endif * - * a0 --> from a0 存放的是from线程的sp - * a1 --> to a1 存放的是to线程的sp - * a2 --> to_thread to_thread仅在使能了SMP功能后使用到 + * a0 --> from a0 存放的是 from 线程的 sp + * a1 --> to a1 存放的是 to 线程的 sp + * a2 --> to_thread to_thread 仅在使能了 SMP 功能后使用到 */ .globl rt_hw_context_switch rt_hw_context_switch: - /* 保存from线程的状态到from线程的栈中 */ + /* 保存 from 线程的状态到 from 线程的栈中 */ /* saved from thread context * x1/ra -> sp(0) * x1/ra -> sp(1) @@ -415,7 +415,7 @@ save_mpie: call rt_cpus_lock_status_restore #endif /*RT_USING_SMP*/ - /* 该函数实现了下文的恢复(to线程的相关状态恢复到CPU寄存器中) */ + /* 该函数实现了下文的恢复(to 线程的相关状态恢复到 CPU 寄存器中) */ j rt_hw_context_switch_exit ``` @@ -423,7 +423,7 @@ save_mpie: ##### rt_hw_context_switch_interrupt -在上下文实现,主要是在中断函数中进行调用,设置上下文切换的标志,然后在`irq_entry`中实现上下文的切换 +在上下文实现,主要是在中断函数中进行调用,设置上下文切换的标志,然后在 `irq_entry` 中实现上下文的切换 ```c void rt_hw_context_switch_interrupt(rt_ubase_t from, rt_ubase_t to) @@ -442,7 +442,7 @@ void rt_hw_context_switch_interrupt(rt_ubase_t from, rt_ubase_t to) #### 实现时钟节拍 -要实现时间片轮转调度、软定时器、rt_thread_delay()等功能,必须要保证rt_tick_increase()被周期性调用。在RISC-V系列MCU中,可以使用内核timer实现 +要实现时间片轮转调度、软定时器、rt_thread_delay() 等功能,必须要保证 rt_tick_increase() 被周期性调用。在 RISC-V 系列 MCU 中,可以使用内核 timer 实现 ```C /* System Tick Configuration */ @@ -478,10 +478,10 @@ void eclic_mtip_handler(void) { ## 参考文档 -[1] [文档中心-内核移植](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/porting/porting) +[1] [文档中心 - 内核移植](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/porting/porting) [2] RISC-V-Reader-Chinese-v2p1.pdf -[3] [野火®]《RT-Thread+内核实现与应用开发实战—基于STM32》.pdf +[3] [野火 ®]《RT-Thread + 内核实现与应用开发实战—基于 STM32》.pdf -[4] Bumblebee内核指令架构手册.pdf \ No newline at end of file +[4] Bumblebee 内核指令架构手册. pdf \ No newline at end of file -- Gitee From a4713f548b44c5a367f8c94d2f273050e440f68c Mon Sep 17 00:00:00 2001 From: chenyingchun0312 Date: Thu, 9 Sep 2021 09:20:53 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E3=80=90=E6=A0=BC=E5=BC=8F=E3=80=91?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=A4=9A=E4=BD=99=E7=A9=BA=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../porting/risc-v/port-risc-v.md | 38 +------------------ 1 file changed, 2 insertions(+), 36 deletions(-) diff --git a/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/port-risc-v.md b/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/port-risc-v.md index f419208..1eff096 100644 --- a/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/port-risc-v.md +++ b/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/port-risc-v.md @@ -4,8 +4,6 @@ RISC-V (读作 “RISC-FIVE”) 是 ** 基于精简指令集计算 (RISC)原理建立的开放 指令集架构 ** (ISA),V 表示为第五代 RISC (精简指令集计算机), 表示此前已经四代 RISC 处理器原型芯片。 - - ## 内核移植简介 - 内核移植就是指将 RT-Thread 内核在不同的芯片架构、不同的板卡上运行起来,能够具备线程管理和调度,内存管理,线程间同步和通信、定时器管理等功能。移植可分为 CPU 架构移植和 BSP(Board support package,板级支持包)移植两部分。 @@ -22,9 +20,7 @@ RTOS 内核移植一般需要实现如下功能,对接 RTOS - 任务切换 - 中断处理 - 时钟节拍 -- [Cache] - - +- Cache (可选) ### libcpu 移植相关 API 介绍 @@ -39,8 +35,6 @@ RTOS 内核移植一般需要实现如下功能,对接 RTOS | rt_uint32_t rt_thread_switch_interrupt_flag; | 表示需要在中断里进行切换的标志 | | rt_uint32_t rt_interrupt_from_thread, rt_interrupt_to_thread; | 在线程进行上下文切换时候,用来保存 from 和 to 线程 | - - ## RISC-V 内核移植 ### RT-Thread RISC-V 内核架构介绍 @@ -49,28 +43,18 @@ RTOS 内核移植一般需要实现如下功能,对接 RTOS ![image-20210906072500749](figures/image-20210906072500749.png) - - - 不同的 RISC-V 内核芯片,我们会发现一个很有意思的现象:任务切换代码经常有一些不一样的地方,比较碎片化,因此我们会发现,有时,很难比较统一的将任务切换代码都放在 common 文件夹中,查看 libcpu\risc-v\SConscript 文件,我们会发现,不同内核架构,有时无法使用 common 文件夹中的任务切换代码 ![image-20210906075256925](figures/image-20210906075256925.png) - - ### RT-Thread RISC-V 内核移植 API 实现 内核移植的主要工作内容,主要就是实现上面 libcpu 移植相关的 API,相关实现函数也位于上面提到的 libcpu/risc-v 文件夹中,因为不同的 RISC-V 内核,任务切换相关 API 实现也不完全一样,下面我们以 `GD32FV103` 芯片为例,将介绍一下,如何实现一个 RISC-V 内核架构的芯片移植工作。 - - `GD32VF103` 是 `bumblebee` 内核,相关的内核移植 API 主要位于如下文件 夹中,接下来,我们依次介绍内核移植 API 的实现 ![image-20210906080637834](figures/image-20210906080637834.png) - - - - #### 关闭全局中断 ```assembly @@ -84,8 +68,6 @@ rt_hw_interrupt_disable: ret ``` - - #### 打开全局中断 ```assembly @@ -99,8 +81,6 @@ rt_hw_interrupt_enable: ret ``` - - #### 实现线程栈初始化 ```c @@ -145,11 +125,9 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, } ``` - - #### 实现上下文切换 -一般在 CM3 等架构下,我们习惯在任务切换函数中,触发 PendSV 中断,然后在 PendSV 处理函数中实现上下文切换,在 RISC-V 架构中,可以使用 Software interrupt 来替换 PendSV,也可以不使用 Software interrupt,直接在任务切换函数中,进行上下文的切换,`rt-thread libcpu/risc-v/common/` 下任务切换的实现,其实使用的是方法二,即 ** 直接在任务切换函数中,直接进行上下文切换 **,而没有使用 Software interrupt,主要原因是: +一般在 CM3 等架构下,我们习惯在任务切换函数中,触发 PendSV 中断,然后在 PendSV 处理函数中实现上下文切换,在 RISC-V 架构中,可以使用 Software interrupt 来替换 PendSV,也可以不使用 Software interrupt,直接在任务切换函数中,进行上下文的切换,`rt-thread libcpu/risc-v/common/` 下任务切换的实现,其实使用的是方法二,即 **直接在任务切换函数中,直接进行上下文切换 **,而没有使用 Software interrupt,主要原因是: 1. 使用 Software interrupt 模式,代码处理起来会别扭一些,特别是在使用 Software interrupt 并没有特别性能提升的时候,可能更没有必要 2. 目前已知的一些 RISC-V 并没有硬件自动压栈,出栈一些 CPU 寄存器,相比 PendSV 硬件上可以自动压栈,出栈 @@ -189,8 +167,6 @@ rt_hw_context_switch_to: j rt_hw_context_switch_exit /* 该函数实现了下文的恢复(to 线程的相关状态恢复到 CPU 寄存器中) */ ``` - - ```assembly .global rt_hw_context_switch_exit rt_hw_context_switch_exit: @@ -297,8 +273,6 @@ rt_hw_context_switch_exit: mret ``` - - ##### rt_hw_context_switch 该函数用于在线程(而不是中断中)实现上下文切换 @@ -419,8 +393,6 @@ save_mpie: j rt_hw_context_switch_exit ``` - - ##### rt_hw_context_switch_interrupt 在上下文实现,主要是在中断函数中进行调用,设置上下文切换的标志,然后在 `irq_entry` 中实现上下文的切换 @@ -438,8 +410,6 @@ void rt_hw_context_switch_interrupt(rt_ubase_t from, rt_ubase_t to) } ``` - - #### 实现时钟节拍 要实现时间片轮转调度、软定时器、rt_thread_delay() 等功能,必须要保证 rt_tick_increase() 被周期性调用。在 RISC-V 系列 MCU 中,可以使用内核 timer 实现 @@ -472,10 +442,6 @@ void eclic_mtip_handler(void) { } ``` - - - - ## 参考文档 [1] [文档中心 - 内核移植](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/porting/porting) -- Gitee From 551005a44456e15aff4c4753dc6bc533e864f9af Mon Sep 17 00:00:00 2001 From: chenyingchun0312 Date: Thu, 9 Sep 2021 10:06:49 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E3=80=90=E6=A0=BC=E5=BC=8F=E3=80=91?= =?UTF-8?q?=E5=8A=A0=E7=B2=97=E4=BD=93=E6=A0=BC=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application-note/porting/risc-v/port-risc-v.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/port-risc-v.md b/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/port-risc-v.md index 1eff096..de7f751 100644 --- a/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/port-risc-v.md +++ b/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/port-risc-v.md @@ -2,7 +2,7 @@ ## RISC-V 简介 -RISC-V (读作 “RISC-FIVE”) 是 ** 基于精简指令集计算 (RISC)原理建立的开放 指令集架构 ** (ISA),V 表示为第五代 RISC (精简指令集计算机), 表示此前已经四代 RISC 处理器原型芯片。 +RISC-V (读作 “RISC-FIVE”) 是 **基于精简指令集计算 (RISC)原理建立的开放 指令集架构** (ISA),V 表示为第五代 RISC (精简指令集计算机), 表示此前已经四代 RISC 处理器原型芯片。 ## 内核移植简介 @@ -24,7 +24,7 @@ RTOS 内核移植一般需要实现如下功能,对接 RTOS ### libcpu 移植相关 API 介绍 -| ** 函数和变量 ** | ** 描述 ** | +| **函数和变量** | **描述** | | ------------------------------------------------------------ | ------------------------------------------------------------ | | rt_base_t rt_hw_interrupt_disable(void); | 关闭全局中断 | | void rt_hw_interrupt_enable(rt_base_t level); | 打开全局中断 | @@ -127,7 +127,7 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, #### 实现上下文切换 -一般在 CM3 等架构下,我们习惯在任务切换函数中,触发 PendSV 中断,然后在 PendSV 处理函数中实现上下文切换,在 RISC-V 架构中,可以使用 Software interrupt 来替换 PendSV,也可以不使用 Software interrupt,直接在任务切换函数中,进行上下文的切换,`rt-thread libcpu/risc-v/common/` 下任务切换的实现,其实使用的是方法二,即 **直接在任务切换函数中,直接进行上下文切换 **,而没有使用 Software interrupt,主要原因是: +一般在 CM3 等架构下,我们习惯在任务切换函数中,触发 PendSV 中断,然后在 PendSV 处理函数中实现上下文切换,在 RISC-V 架构中,可以使用 Software interrupt 来替换 PendSV,也可以不使用 Software interrupt,直接在任务切换函数中,进行上下文的切换,`rt-thread libcpu/risc-v/common/` 下任务切换的实现,其实使用的是方法二,即 **直接在任务切换函数中,直接进行上下文切换**,而没有使用 Software interrupt,主要原因是: 1. 使用 Software interrupt 模式,代码处理起来会别扭一些,特别是在使用 Software interrupt 并没有特别性能提升的时候,可能更没有必要 2. 目前已知的一些 RISC-V 并没有硬件自动压栈,出栈一些 CPU 寄存器,相比 PendSV 硬件上可以自动压栈,出栈 @@ -444,7 +444,7 @@ void eclic_mtip_handler(void) { ## 参考文档 -[1] [文档中心 - 内核移植](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/porting/porting) +[1] [文档中心-内核移植](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/porting/porting) [2] RISC-V-Reader-Chinese-v2p1.pdf -- Gitee From d25586d0ebba2e8b089ed0347d3273db85d55b68 Mon Sep 17 00:00:00 2001 From: chenyingchun Date: Sun, 12 Sep 2021 22:10:54 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E3=80=90doc=E3=80=91update?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application-note/porting/risc-v/port-risc-v.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/port-risc-v.md b/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/port-risc-v.md index 1eff096..1f00c8d 100644 --- a/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/port-risc-v.md +++ b/rt-thread-version/rt-thread-standard/application-note/porting/risc-v/port-risc-v.md @@ -55,7 +55,7 @@ RTOS 内核移植一般需要实现如下功能,对接 RTOS ![image-20210906080637834](figures/image-20210906080637834.png) -#### 关闭全局中断 +#### 实现全局中断关闭 ```assembly /* @@ -68,7 +68,7 @@ rt_hw_interrupt_disable: ret ``` -#### 打开全局中断 +#### 实现全局中断打开 ```assembly /* -- Gitee