【瑞萨RA系列】瑞萨 FSP 固件库 --- 5

参考链接:[野火]瑞萨RA系列FSP库开发实战指南——基于野火启明开发板 — [野火]瑞萨RA系列FSP库开发实战指南——基于野火启明开发板 文档 (embedfire.com)

一、瑞萨 FSP 库简介

        FSP 全称为“Flexible Software Package”,中文译为“灵活配置软件包”。

        FSP 旨在以较低的内存占用量提供快速高效的驱动程序和协议栈。FSP 集成了中间件协议栈、独立于 RTOS 的硬件抽象层(HAL)驱动程序,以及最基础的板级支持包(BSP)驱动程序。FSP 还 支持 FreeRTOS™ 实时操作系统(RTOS)。

FSP 由瑞萨公司维护和提供支持,开发人员可以从集成开发环境(e2s)或 FSP 的 GitHub 仓库 (https://github.com/renesas/fsp)查看或下载 FSP 的源代码,从而全面地了解 FSP。


提示: FSP 是使用 C99(C 语言标准)编写的开源软件,提供完整的源代码,但仅限用于瑞萨的 硬件。


二、FSP 库层次结构

1.1 RA MCU

        RA MCU 位于最底层的是 RA 系列微控制器硬件。不同系列的 RA 微控制器之间具有非常一致、 高度兼容的外设硬件,这为软件开发人员提供了极大的便利。 

1.2 BSP

        BSP 往上一层是板级支持包(BSP)。BSP 处于 FSP 软件的底层,是 FSP 的功能基础。BSP 负责 MCU 复位后初始化系统使程序执行进入 main 函数,并为上层软件提供其他服务。 BSP 函数名称以 R_BSP_ 开头,BSP 宏以 BSP_ 开头,数据类型定义以 _bsp 开头,以便于与 FSP 的其他部分区分开来。

1.3 HAL

        HAL 在 BSP 之上是硬件抽象层(Hardware Abstraction Layer (HAL)),它以较小的内存占用量 为外设提供高效的设备驱动程序,实现易于使用的接口,使开发人员不必直接处理单片机 的寄存器组,并使处于 HAL 层以上的软件更容易在整个 RA 产品家族中移植。它是模块 (Modules)的集合,每个模块都是 RA 系列微控制器中可用的外设的驱动程序(比如 SPI、 I2C、ADC),其名称以 r_ 开头。所有这些模块本质上均与 RTOS 无关。HAL 层除了“模 块”以外还有:“接口”、“实例”等关键概念。 HAL 层的函数的名称以 R_ 开头,格式一般为 R__。默认情况下, 所有驱动函数都是非阻塞的,并返回执行状态。驱动函数本身不分配任何内存,调用时需 要将内存传递给函数。

1.4 操作系统和中间件

        操作系统和中间件 FSP 库首选支持 FreeRTOS,可以通过软件快速配置。FreeRTOS 是非常流行 的实时操作系统,支持多任务调度、任务通知、队列、互斥、信号量和软件计时器等功能, 其系统开销非常小,占用的内存也很小,性能可靠,经常被用于内存资源十分有限且需要 实时响应处理的操作环境。 中间件介于 HAL 硬件抽象层和用户应用层之间,为应用层提供服务。FSP 的中间件支持包 括:TCP/IP 协议栈、USB 协议栈、WiFi 和蓝牙 BLE 协议栈、电容式触摸、FAT 文件系统、图 形库、加密等等。FSP 中间件函数的名称命名格式一般为:RM__。

1.5 应用层

        应用层,该层为 FSP 层次划分的最顶层,包含了用户的应用代码。用户通过 FSP 底层提供的直观、 简单和统一的 API 接口调用下面各层,从而访问 FSP 的所有功能,这样用户就能以非常简单和直接的方式编写易于理解、维护简单、移植方便的代码。

三、FSP库的相关概念

3.1模块(Modules)

        模块可以是外设驱动程序、纯软件或介于这两者之间,并且是 FSP 的构 建模块。模块通常是独立的单元,但它们可能依赖于其他模块。可以通过组合多个模块来 构建应用程序,为用户提供所需功能。

3.2模块实例(Module Instance)

        模块的单个、独立实例化(模块配置)。例如,USB 端口可 能需要使用 r_dmac 模块的两个实例与其他端口之间来回传输数据;又例如,当应用程序需 要使用两个 GPT 定时器时,每一个这个定时器都是 r_gpt 模块的实例。

3. 3接口(Interfaces)

        接口包含 API 定义,具有相似功能的模块可以共用这些 API 定义。模块 通过这些定义提供通用功能。通过这些 API 定义,使用相同接口的模块可以互换使用。可 以将接口视为两个模块之间的合同,两个模块均同意使用合同中达成一致的信息进行协作。 接口只是定义,并不会增加代码的大小。

3.4实例(Instances)

        接口规定所提供的功能,而接口的实例则真正实现了这些功能。每个实 例都与特定的接口关联,并使用接口中的枚举、数据结构和 API 原型。这样,应用程序便 可以在需要时交换实例。

3.5 堆叠(Stacks)

        FSP 架构所采用的设计方式是,模块可以堆叠起来协同工作,从而形成了 一个 FSP 堆。将一个模块所能提供的功能与另一个模块所需要的功能相匹配,这就是堆叠 过程。堆由顶层模块及其所有依赖项组成。

3.6应用程序(Application)

        归用户所有并由用户维护的代码。

3.7  回调函数(Callback Functions)

        当有事件发生时(例如,USB 接收到一些数据时),中断 服务程序(ISR)将调用这些函数。中断回调函数是应用程序的组成部分,如果是在中断使 用,应尽量简短,因为它们将在中断服务程序内运行,会阻碍其他中断执行。

 

  • 16
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值