ZhangJing
ZhangJing
pr里提到的功能,比如cbo指令支持、smp功能支持、M mode支持、DM支持这些确实是目前riscv 平台需要实现的,这个pr相当于是对目前riscv平台相关代码的重构。个人同意@unicornx的观点,尽可能将pr内容拆开,cbo指令支持等这些相对独立的功能可以单独merge。我在rtt 5.2.0版本上基于我们的dp1000 平台目前也实现了pr里的部分功能,后续我可以参与该pr的review。
> > SMART 版本可以尝试下下面的链接: https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2025.01.20/riscv64-musl-ubuntu-22.04-gcc-nightly-2025.01.20-nightly.tar.xz 选择musl版本,这块没经验,不确定,只能建议尝试,后面会出一些文章介绍相关术语 > > 这个估计不行,rt-smart 用的 musl gcc 听说是定制了 rtt 自己的什么东西,具体要问睿赛德了。 应该是的,musl libc库是定制过的,前几天我刚问过
是否考虑设置专门的中断栈,在异常/中断的时候上下文保存在当前被中断的任务栈上,保存上下文后切换到中断栈执行后续的中断处理,这样在有中断嵌套或者isr占用栈空间过大时不会导致thread的栈溢出。
> #9367 很大可能是这里的问题引起的 验证了下,merge pr9367后可以解决该问题。
1、plic_base的赋值:建议把plic_base 定义为全局变量,各bsp在rt_hw_board_init中对plic_base赋值,同时在plic_init中判断下该值是不是NULL; 2、plic_init 是不是还是放到plic.c中定义合理些?
目前`rt_hw_asid_init`中通过向satp寄存器的bit[59:44]写1以确定ASIDLEN的值,此函数最好在MMU页表未使能前调用,所以把 ASID 初始化操作合并到` rt_hw_mem_setup_early`的开始处比较合理些。
再就是`commn64`中通过`ARCH_USING_ASID`来决定是否使用ASID,是否可以通过`rt_hw_asid_init`中的ASID_BITS值确定当前cpu是否支持ASID,如果支持,则默认在rt_hw_aspace_switch中使用asid功能。