[RISCV]为RISC-V移植FreeRTOS系列之一 -- 目录结构

前言

写这篇文章的时候,我基本已经完成了这项工作了,花了一周的时间来把freertos porting到Andes公司的N25 riscv core上,本来其实是想支持国产的RT-Thread,但是奈何资料太少了,可能我后续会基于现有版本来继续porting一个rt-thread版本的。
唉,想支持国产真难啊 >.<

下面就把这个过程做一个记录,毕竟这也算是真正从ldscript开始到两个任务同时跑起来,完全自己研究以后做出来的,想来也挺有意义,虽然之前也porting过STM32版本的,但是那个都是在大量教程和source code的基础上做的,真正没有怎么深入研究。好了,废话说的太多了,下面详细说说怎么来做这件事。


作者:wangyijieonline
链接:https://blog.csdn.net/wangyijieonline/article/details/109677855
来源:CSDN
著作权归作者所有。商业转载请联系作者获得授权,非商业转载必须注明出处。


一、FreeRTOS是什么?

这个问题之前讨论过,这里就不展开说了,可以参考我之前写的另一篇文章
[RTOS]uCOS、FreeRTOS、RTThread、RTX等RTOS的对比之特点

这里将其称之为一种RTOS(实时操作系统),尤其对资源受限的嵌入式设备友好。
在2019年3月12日,官宣支持riscv.
[RISCV]为RISC-V移植FreeRTOS系列之一 -- 目录结构_第1张图片

二、RISC-V是什么?

RISC-V(发音为"risk five")是一种新的指令集体系结构(ISA),最初旨在支持计算机体系结构研究和教育,但现在我们希望它将成为行业实现的标准开放体系结构。我们定义 RISC-V 的目标包括:

  • 一个完全开放的 ISA,可免费提供给学术界和工业界。
  • 真正的 ISA 适合直接本机硬件实现,而不仅仅是模拟或二进制转换。
  • 避免为特定微体系结构样式(例如,微编码、按顺序、分离、顺序不定)或实现技术(例如,全定制、ASIC、FPGA)进行"过度架构"的 ISA,但允许在其中任何一种中有效实现。
  • ISA 分为一个小基整数 ISA,可作为定制加速器或教育目的的基础,以及可选的标准扩展,以支持一般用途软件开发。
  • 支持经修订的2008年 IEEE-754 浮点标准 [8]。
  • ISA 支持广泛的用户级 ISA 扩展和专用变体。
  • 适用于应用程序、操作系统内核和硬件实现的 32 位和 64 位地址空间变体。
  • 支持高并行多核或多核实现(包括异构多处理器)的 ISA。
  • 可选的可变长度指令,用于扩展可用的指令编码空间,并支持可选的密集指令编码,以提高性能、静态代码大小和能效。
  • 完全可虚拟化的 ISA,以简化虚拟机管理程序开发。
  • 一种 ISA,它简化了新的主管级和虚拟机管理级 ISA 设计的实验。

以上对于riscv的介绍摘自The RISC-V Instruction Set Manual, Volume I: UserLevel ISA, Version 2.0, 点击链接查看下载pdf版本

三、移植freertos

1.下载freertos的最新源码

Download FreeRTOS
[RISCV]为RISC-V移植FreeRTOS系列之一 -- 目录结构_第2张图片
写这篇文章的时候最新版是202011.00版,下这个就可以了,大同小异,推荐使用最新版因为会有一些bug的修复,尤其是这种刚刚被支持的MCU类型。

2. 建立工程目录结构

在这一步之前还需要准备一个工程,一个纯裸机的工程,最起码中断、printf这些要已经跑通了的。

把下载下来的压缩包打开,我们其实需要的就是FreeRTOS这个文件夹,他里面已经包含了所有的源码,暂时用不到Plus,这里面是一些进阶的应用层软件上的东西,我们只要把我们的地基打好,这些软件上的东西都不是什么大问题。
[RISCV]为RISC-V移植FreeRTOS系列之一 -- 目录结构_第3张图片
FreeRTOS这个文件夹直接全都解压到我们的source code目录下,像下面这样,其中我这个截图中的common目录放的是一些interrupt、reset、trap、system init相关的文件,driver目录是bsp,ldscript目录是链接脚本文件,libc目录是printf的具体实现,startup目录是start.S文件。
[RISCV]为RISC-V移植FreeRTOS系列之一 -- 目录结构_第4张图片
下面需要对FreeRTOS这个目录进行瘦身,

1, 关于Demo文件夹

打开Demo文件夹看看其实他就是给我们准备了两个例子,以Demo/RISC-V_RV32M1_Vega_GCC_Eclipse/projects/RTOSDemo_ri5cy为例blinky_demo(闪灯)和full_demo,但是对我们来说即便是blinky也太复杂了。还有ld文件我们已经准备好了,FreeRTOSConfig.hmain.c文件大同小异。[RISCV]为RISC-V移植FreeRTOS系列之一 -- 目录结构_第5张图片
所以,删掉整个Demo目录

2, 关于Source文件夹

打开Source/portable,发现这里面也给出了一堆demo。
[RISCV]为RISC-V移植FreeRTOS系列之一 -- 目录结构_第6张图片

这里我们只留两个文件夹,一个Source/portable/GCC/RISC-V文件夹(我这里是用的cmake建立的工程,其他IDE用户自己决定用哪个),另一个Source/portable/MemMang文件夹。

3, 新建一个App文件夹

还记得刚才删掉的Demo文件夹吗,我们现在要新建一个App文件夹,用来放两个文件。
一个FreeRTOSConfig.h,一个main.c,内容先不管,我们先把目录结构建立好。

好了,这样我们通过增删(主要是删)在基本不变动原有目录结构的前提下建好了目录结构,如下:
[RISCV]为RISC-V移植FreeRTOS系列之一 -- 目录结构_第7张图片

4, 关于Test文件夹

这个文件夹可删可不删,对我们现阶段来说没什么用,是一些function test之类的相关的,为了减小仓库的体积这里还是建议删掉,后面要用可以再添加进来。

总结

本文主要介绍了建立freertos移植目录结构的问题,而之所以要这样做,就是为了以后如果有版本升级的时候直接替换不会对工程产生很大影响。

文章太长看起来费劲,代码级的移植放在下一篇文章。

你可能感兴趣的:(RISCV)