zl程序教程

您现在的位置是:首页 >  其他

当前栏目

【全网唯一】 自己动手实现 FreeRTOS-metal-SU

2023-04-18 16:42:48 时间

前言


FreeRTOS 是一个开源的实时操作系统(RTOS),适用于微控制器和小型嵌入式系统。它提供了多任务处理、内存管理、定时器、软件定时器、消息队列和信号量等功能,以帮助开发人员构建可靠和高效的嵌入式系统。

FreeRTOS 的设计原则之一是低内存占用率。它采用了一些优化策略,以最小化内存使用,从而使它能够在资源受限的嵌入式设备上运行。此外,FreeRTOS 具有可移植性,可以运行在各种处理器架构上。

FreeRTOS 还提供了广泛的文档和示例代码,以帮助开发人员快速上手和开发应用程序。此外,它也具有强大的社区支持,可以在社区中获得技术支持和交流。

总的来说,FreeRTOS 是一个流行的、可靠的和易于使用的实时操作系统,适用于各种嵌入式设备和应用程序。

FreeRTOS-MPU 是 FreeRTOS 的一个变体,专为处理器具有内存保护单元(MPU)的嵌入式设备而设计。MPU 是一种硬件机制,可用于防止软件错误导致的内存访问冲突。FreeRTOS-MPU 通过使用 MPU 来实现内存保护和隔离,从而增强了系统的安全性和可靠性。

FreeRTOS-MPU 提供了两种不同的内存保护模式:基于任务和基于分区。在基于任务的模式下,每个任务都有自己的内存空间,并且只能访问其分配的内存。在基于分区的模式下,内存被分为多个分区,并且每个任务只能访问其分配的分区。

除了内存保护之外,FreeRTOS-MPU 还提供了其他一些安全性功能,如任务堆栈溢出保护、任务优先级保护、任务删除保护等。这些功能都有助于保护系统免受软件错误和攻击。

总的来说,FreeRTOS-MPU 是一个为具有 MPU 的嵌入式设备提供安全性和保护的实时操作系统。它可以帮助开发人员构建更加可靠和安全的嵌入式系统。

FreeRTOS-metal 是 FreeRTOS 的一个变体,专为基于 RISC-V 微控制器的嵌入式设备而设计。它结合了 FreeRTOS 和 Metal 库,提供了一个轻量级、高效和可移植的实时操作系统。它包括了 FreeRTOS 和 Metal 库的许多特性和优势,如多任务处理、内存管理、设备驱动程序等。

FreeRTOS-metal 的目标是提供一个可靠的实时操作系统,使嵌入式开发人员能够更轻松地构建复杂的嵌入式系统。它具有低内存占用率、可移植性和可定制性等特点,可以在各种处理器架构和应用场景中使用。

与传统的 FreeRTOS 相比,FreeRTOS-metal 针对 RISC-V 微控制器进行了优化和改进。它使用了 RISC-V 的特殊指令和硬件支持,从而提供了更高的效率和性能。此外,FreeRTOS-metal 还包括了一些与 RISC-V 相关的特性,如特殊的中断控制器、可定制的处理器核心等。

总的来说,FreeRTOS-metal 是一个为 RISC-V 微控制器设计的实时操作系统,它结合了 FreeRTOS 和 Metal 库的优势,并提供了高效、可靠和可移植的解决方案,适用于各种嵌入式系统和应用程序。

 FreeRTOS-metal 是运行在机器模式和用户模式,适用于大多数简单应用场景,不过对于需要运行多运行区域隔离的场景(比如运行多个 RTOS),则需要 FreeRTOS 运行在 S-U 模式,M 模式运行监视软件,我们姑且称为 FreeRTOS-metal-SU,这就是本文的成果,后续可能有机会合并入 FreeRTOS-metal。

GitHub - sifive/FreeRTOS-metal

正文

我们将描述 FreeRTOS-metal-SU 在 FreeRTOS-metal 基础上进行的修改 

 修改主要包括上述 5 个文件,以及FreeRTOSConfig.h、链接脚本,下面主要对每个文件需要修改的地方进行描述:

  1. FreeRTOSConfig.h
    • 配置开启 MPU 特性,RISC-V ISA 中称为 PMP
    • 配置系统定时器比较器寄存器地址
    • 配置中断和异常的用户 hook
  2. portASM.S
    • 修改 M 模式寄存器为 S 模式寄存器:mcause/mepc/mstatus//mtvec/mret等
    • 注意 mstatus 和 sstatus 内部结构不同,所以不能直接改名,控制位也需要对应改变
    • 修改 PMP 切换为 sPMP 切换
  3. port.c
    • 修改策略和 portASM.S 类似
    • 特定平台 S 模式如法处理自身 ecall,所以需要将这部分 ecall 修改为普通跳转
    • 修改 PMP 初始化为 sPMP 初始化
  4. portmacro.h
    • 修改中断管理部分的 mstatus
  5. task.c
    • 修改  PMP 恢复为 sPMP 恢复
  6. mpu_wrappers.h
    • xx
  7. xxx.ld
    • 定义 特权代码段、数据段、系统调用代码段

总结

RISC-V是一种开源指令集架构,其中定义了几种特权级别,包括机器模式(M模式)、监管模式(S模式)和用户模式(U模式)。其中,管理模式和用户模式是最常见的两种模式。

管理模式(也称为特权模式)是系统最高权限模式,它允许对硬件和系统资源进行完全控制,包括对内存、外设、中断和异常等的控制。管理模式下,指令集支持特权指令,并提供了额外的寄存器和访问权限。管理模式通常由操作系统内核使用,以执行核心系统管理任务。

用户模式(也称为非特权模式)是系统的最低特权模式,它是系统中大多数应用程序的默认模式。用户模式下,访问受限制,只能使用非特权指令,不能直接访问硬件和系统资源。用户模式可以通过陷阱机制转换到管理模式,以便执行需要特权的操作,例如I/O操作和系统调用等。

总之,管理模式和用户模式是RISC-V中最基本和最常见的两种特权级别,分别用于执行系统管理任务和普通应用程序。通过使用这些不同的特权级别,RISC-V可以提供安全和可靠的系统执行环境。

皮格马利翁效应心理学指出,赞美、赞同能够产生奇迹,越具体,效果越好~
“收藏夹吃灰”是学“器”练“术”非常聪明的方法,帮助我们避免日常低效的勤奋~