rt-rhread 移植 rv32 和 rv64 bsp 的 代码
bsp/riscv32-virt/
libcpu/risc-v/common
libcpu/risc-v/virt32
libcpu/risc-v/virt64
libcpu/risc-v/k210
libcpu/risc-v/e310
libcpu/risc-v/rv32m1
- 这里以 rv32m1 和 virt64 为例
rv32m1 的 代码比较乱,很多功能放到了 bsp 目录中
例如 中断处理函数 及 对 rt_tick_increase 的调用
riscv32_rtt/libcpu/risc-v/common/cpuport.c
riscv32_rtt/libcpu/risc-v/virt/tick.c
riscv32_rtt/libcpu/risc-v/common/context_gcc.S
riscv32_rtt/libcpu/risc-v/virt/interrupt_gcc.S
riscv32_rtt/libcpu/risc-v/virt/startup_gcc.S
riscv64_rtt/libcpu/risc-v/virt/cpuport.c
riscv64_rtt/libcpu/risc-v/virt/tick.c
riscv64_rtt/libcpu/risc-v/virt/context_gcc.S
riscv64_rtt/libcpu/risc-v/virt/interrupt_gcc.S
riscv64_rtt/libcpu/risc-v/virt/startup_gcc.S
libcpu/risc-v/virt/cpuport.h
#ifdef ARCH_CPU_64BIT
#define STORE sd
#define LOAD ld
#define REGBYTES 8
#else
#define STORE sw
#define LOAD lw
#define REGBYTES 4
#endif
这些代码需要提供的功能及API
1. boot 的 第一行代码
2. 一级中断处理函数
3. 调度的 switch_to
4. 时钟中断处理函数 调用调度
需要调用
rt_tick_increase
需要提供
rt_hw_context_switch_to
rt_hw_stack_init
rt_hw_cpu_shutdown
cpuport.c 中提供
rt_hw_stack_init
rt_hw_cpu_shutdown
interrupt_gcc.S 中提供
一级中断处理函数
interrupt.c & tick.c提供
二级中断处理函数
context_gcc.S 提供
rt_hw_interrupt_disable
rt_hw_interrupt_enable
rt_hw_context_switch_to
rt_hw_context_switch
rt_hw_context_switch_interrupt
rt_hw_context_switch_exit
start.S 提供
启动的第一行代码