FreeRTOS 10.4.3在RISCV(T-HEAD C906)平台上移植过程

本文详细记录了FreeRTOS V10.4.3在RISCV T-HEAD C906平台上的移植过程,包括启动设计、调试器选择、FREERTOS调度器的特殊点,以及移植步骤,如初始化TLB、打印驱动、中断处理和定时器设置。文章强调了移植的可移植性和调试的重要性,并讨论了调试器的选型问题,特别是对于私有调试IP带来的挑战。
摘要由CSDN通过智能技术生成

好记性不如烂笔头,记录点滴移植经历,一方面便于总结提炼,二是分享,让别人少走有些弯路,自己以后踩坑了也爬的利索点。

首先梳理一下移植框架,FreeRTOS还是非常简单的, 体量上要比RT-Thread,Nuttx等偏重型的系统轻量不少,这可能也是FreeRTOS一般不会用在偏重型方案上的一个因素吧,毕竟仅仅一个调度器,支持的组件和框架较少,所以FreeRTOS比较多的用在如工业控制,智能小家电等功能单一的应用场合。

FreeRTOS V10.4.3的移植

整体的移植框架如下:

下面说下具体的移植步骤:

     0.起动设计

  1. 搭建构建环境,准备利用melis上已经建好的环境,借”鸡“生”蛋".目标是移植FreeRTOS 系统,所以这部分不重点记录,总之,环境已建好。
  2. 用不用sbi? SBI主要为runtime提供M模式下的支持。暂时先用,后续优化掉,因为与Melis相比,FreeRTOS构建的系统相对简单很多,不用支持MMU,整个FreeRTOS系统加上应用都可以运行在M模式,sbi也就失去的存在的必要,但是还是决定先保留着,移植完成后再优化掉。主要考虑三点,1.环境和sbi之间有依赖,包括链接脚本,一些汇编等等,不想这个时候动它,2.SBI本身提供了一些vendor的扩展接口,这些东西暂时还不确定将来会不会用到,如果省去,万一需要还得以某种形式加回来,麻烦。所以暂时先用SBI启动,后续逐渐做减法。3.利用sbi中已经封装好的串口驱动,最小系统启动。用SBI启动,需要都SBI固件做一些小小的修改,改动如下:
    1. diff --git a/firmware/fw_jump.S b/firmware/fw_jump.S
      index afbcec0..79b3de8 100644
      --- a/firmware/fw_jump.S
      +++ b/firmware/fw_jump.S
      @@ -84,7 +84,7 @@ fw_next_addr:
               * The next address should be returned in 'a0'
               */
       fw_next_mode:
      -       li      a0, PRV_S
      +       li      a0, PRV_M
              ret
      

      修改fw_next_addr 的实现,使用返回的next状态为PRV_M,也就是下阶段是M-Mode,非Linux and Melis运行的S-Mode.,验证如下:0x40010600是OS _star地址,可以正确从SBI跳出,进入这个地址,表示可以进行接下来的CPU引导了. 

    2. 下图代表当前处理器功能组件的打开状态,可以

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

papaofdoudou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值