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

news/2025/2/28 3:07:42/

前言


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可以提供安全和可靠的系统执行环境。

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


http://www.ppmy.cn/news/33351.html

相关文章

海思SD3403/SS928V100开发(7)mcp2515-SPI转CAN驱动开发

1. 前言 需求: 需要一路can进行收发 分析: 根据目前使用较多的方案是使用主控端SPI接口 接入MCP2515芯片进行CAN协议转换 硬件: MCP2515->SPI2->SS928 2. Uboot开发 2.1 pinmux复用配置 2.1.1 修改uboot参数表 路径: osdrv/tools/pc/uboot_tools/ SS928V100…

万字长文带你初步理解计算机网络

目录 1.网络发展 2.认识 "协议" 和 标准 3.网络协议初识 4.OSI七层模型 5.TCP/IP 6.网络传输基本流程 首先,说到网络你的第一印象是什么? 站在普通人角度肯定就是我可以通过网络做各种事情,刷抖音看B站打王者还有今天在这里…

Vue学习——【第一弹】

前言 提到前端框架,大家的脑海中肯定会出现Vue.js,那么这篇文章以及后续文章就以一个初学者的角度来对Vue的学习做出学习总结,我们先从Vue2开始学习,循序渐进,把每一步做好。 Vue的创始人 Vue的创始人是尤雨溪(Evan…

Cursor太强了,从零开始写ChatGLM大模型的微调代码

Cursor太强了,从零开始写ChatGLM大模型的微调代码初次体验对话实录问:怎么使用lora对大模型进行微调问:怎么用lora对chatglm模型进行微调问:chatglm是清华开源的大语言模型问:LoRA的全称是Low-Rank Adaptation of Larg…

uboot主目录下Makefile文件的分析,以及配置过程分析

主Makefile执行分析 uboot的编译过程 (1)配置 查看主Makefile文件下所支持的配置的板子,通过make x210_sd_config来实现编译前的配置 (2)编译 make直接编译,这个前提条件是主Makefile文件下指定了编译…

Faster R-CNN

Faster R-CNN的步骤 1. 输入任意大小的图片,经过CNN网络输出特征图,特征图用于共享RPN、ROI Pooling 2. 特征图经过RPN生成候选区域 3.候选区域与1.中的特征图共同输入到ROI Pooling得到每个候选区域的特征图,然后进行softmax分类&#xff0…

南京邮电大学数据库第一次课后作业

1.单选题 (5分) (B)是存储在计算机内有结构的数据的集合。 (A)数据库系统 (B)数据库 (C)数据库管理系统 (D)数据结构 2.单选题 (5分) 数据库的特点之一是数据的共享,严格的讲,这里的…

Python学习(2)-NumPy矩阵与通用函数

文章首发于:My Blog 欢迎大佬们前来逛逛 1. NumPy矩阵 1.1 mat函数 matasmatrix asmatrix(data, dtypeNone):data:表示输入的数组或者字符串,使用‘,’分割列,使用‘;’分割行 创建两个普通的矩阵&…