【致敬未来的攻城狮计划】— 连续打卡第十天:FSP固件库开发及FSP配置详解。

news/2024/4/26 2:51:54/文章来源:https://blog.csdn.net/oxygen23333/article/details/130305534

系列文章目录

1.连续打卡第一天:提前对CPK_RA2E1是瑞萨RA系列开发板的初体验,了解一下

2.开发环境的选择和调试(从零开始,加油)

3.欲速则不达,今天是对RA2E1 基础知识的补充学习。

4.e2 studio 使用教程

5.Keil配置使用(使用 RASC 生成 Keil 工程)

6.Keil配置使用(使用 RASC 生成 Keil 工程)

7.(电脑重装系统)学习RA产品家族选型手册

8.问题解决、学习RA寄存器、用寄存器的方式点亮第一个LED灯。


文章目录

目录

系列文章目录

前言

一、FSP层次架构?

二、FSP工程架构

三、FSP库的一些重要概念

总结


前言

        昨天学习了RA寄存器的基础和使用,今天学习FSP固件库的基础和使用,并使用FSP固件库点亮第一个灯。其实在环境搭建的时候已经点亮了LED,今天是系统的学习,之前是囫囵吞枣,做出来就开心了,知其然更要知其所以然。


一、FSP层次架构?

RA MCU

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

BSP

        往上一层是板级支持包(BSP)。BSP 处于 FSP 软件的底层,是 FSP 的功能基础。 BSP 负责 MCU 复位后初始化系统使程序执行进入 main 函数,并为上层软件提供其他服务。

        BSP 函数名称以 R_BSP_ 开头,BSP 宏以 BSP_ 开头,数据类型定义以 _bsp 开头, 以便于与 FSP 的其他部分区分开来。

HAL

        在 BSP 之上是硬件抽象层(Hardware Abstraction Layer (HAL)), 它以较小的内存占用量为外设提供高效的设备驱动程序,实现易于使用的接口, 使开发人员不必直接处理单片机的寄存器组,并使处于 HAL 层以上的软件更容易在整个 RA 产品家族中移植。 它是模块(Modules)的集合, 每个模块都是 RA 系列微控制器中可用的外设的驱动程序(比如 SPI、I2C、ADC), 其名称以 r_ 开头。所有这些模块本质上均与 RTOS 无关。 HAL 层除了“模块”以外还有:“接口”“实例” 等关键概念。

        HAL 层的函数的名称以 R_ 开头,格式一般为 R_<MODULE>_<Function>。 默认情况下,所有驱动函数都是非阻塞的,并返回执行状态。驱动函数本身不分配任何内存,调用时需要将内存传递给函数。

操作系统和中间件

        FSP 库首选支持 FreeRTOS,可以通过软件快速配置。 FreeRTOS 是非常流行的实时操作系统,支持多任务调度、任务通知、队列、互斥、信号量和软件计时器等功能, 其系统开销非常小,占用的内存也很小,性能可靠,经常被用于内存资源十分有限且需要实时响应处理的操作环境。

        中间件介于 HAL 硬件抽象层和用户应用层之间,为应用层提供服务。 FSP 的中间件支持包括:TCP/IP协议栈、USB协议栈、WiFi和蓝牙BLE协议栈、电容式触摸、FAT文件系统、图形库、加密等等。 FSP 中间件函数的名称命名格式一般为:RM_<MODULE>_<Function>

应用层

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

 以上知识由  野火  官方提供,写的很详细,欢迎大家学习。


二、FSP工程架构

  • 第一部分为 FSP 库及其配置,包括 ra、ra_cfg、ra_gen 这3个文件夹,它们由软件生成。

  • 第二部分为用户代码,包括 src 文件夹。

  • 第三部分为编译输出文件,包括 Debug 或 Release 文件夹 

Project
├─ ra
│  ├─ arm               包含 ARM CMSIS 代码
│  └─ fsp               包含 FSP 库本体
│     ├─ inc
│     │  ├─ api         FSP 接口 (FSP Interfaces)(接口包含 API 定义)
│     │  └─ instances   FSP 实例 (FSP Instances)(接口的实例)
│     └─ src
│        ├─ bsp         BSP 层 (Board Support Package)
│        │  ├─ cmsis    包含寄存器定义文件和启动文件
│        │  └─ mcu      包含 BSP 代码
│        └─ r_<module>  FSP 模块 (FSP Modules)(接口由模块实现,模块通过接口提供通用功能)
├─ ra_cfg               包含用户的 FSP 配置
├─ ra_gen               包含 FSP 配置
├─ Debug/Release        包含编译后生成的中间文件和最终可执行文件等
└─ src└─hal_entry.c        包含了用户裸机应用程序的入口函数 hal_entry。当没有使用 RTOS 的时候,hal_entry 函数由C语言 main 函数调用,所以其作用基本等同于 main

       

        以上的这些都是,有软件自动生成,只是我们需要做一个了解,由(RASC)自动生成,RASC在往期文章中已经讲过,大家可以自行翻阅。


三、FSP库的一些重要概念

        使用FSP库开发,会极大的提高我们写程序的效率,使用一个新的东西,学习一个新的东西必然是密不可分一些理论知识,所以以下的基础概念需要了解,在往期文章中也提过:

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

  2. 模块实例(Module Instance)单个、独立的实例化(配置)模块。 例如,USB 端口可能需要使用 r_dmac 模块的两个实例与其他端口之间来回传输数据。

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

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

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

  6. 应用程序(Application):归用户所有并由用户维护的代码。

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

  8.  以上知识来源于  野火  瑞萨开发,值得学习和转发,写的很详细,让每一个初学者不会在 迷茫。


总结

        这里对FSP库层次架构进行了一个系统的讲述,明天开始编程实战!!!


月明星稀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_102211.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手势语言识别模型训练及应用

使用训练集训练模型&#xff0c;使模型能够识别不同手势。 OpenCV-Python环境使用训练集训练模型&#xff0c;使模型能够识别不同手势。系统测试 本项目基于卷积神经网络&#xff0c;通过Python的翻转功能沿垂直轴翻转每个图像&#xff0c;实现手势语言识别的功能。系统流程如图…

数据治理与数据中台架构

随着工业 4.0 时代的到来&#xff0c;传统行业的数字化转型是大势所趋&#xff1b;将数据提高到数据要素层面&#xff0c;让传统的技术在新的场景下发挥出新的作用&#xff0c;是近期研究和探讨的焦点话题。数语科技支持和服务传统行业多年&#xff0c;聚焦于传统数据建模和数据…

catkin_make_workspace

ERROR1 : CMake Error at /opt/ros/melodic/share/cv_bridge/cmake/cv_bridgeConfig.cmake:113 (message): Project ‘cv_bridge’ specifies ‘/usr/include/opencv’ as an include dir, which is not found. It does neither exist as an absolute directory nor in ‘${{pr…

.net6 core web项目发布部署到Linux,以守护进程服务的形式部署启动,nginx实现转发

一、发布项目 1、以文件夹形式 2、目标运行时选对应的平台&#xff08;Linux-x64&#xff09; 3、文件夹选项&#xff1a;在发布前删除所有现有文件 二、部署项目&#xff08;安装.net6环境&#xff1a;参考Linux安装 dotnet sdk 6.0&#xff09; &#xff08;1&#xff09;…

网络基础,InetAddress,Socket,TCP,UDP

概念&#xff1a;两台设备之间通过网络实现数据运输网络通信&#xff1a;将数据通过网络从一台设备传输到另一台设备java.net包下提供了一系列的类或接口&#xff0c;供程序员使用&#xff0c;完成网络通信网络&#xff1a;两台或多台设备通过一定物理设备连接起来构成了网络根…

Scala中的Map 集合详解

目录 一、不可变长Map集合 1.map的声明与遍历 2.map的常用方法&#xff1a;get、getOrElse、keys、values、、&#xff1a; 二、可变长Map集合 三、Map的其他方法 key -> value 的语法形式实际上是用库中的隐式转换实现的&#xff0c;实际调用了 Map.apply 方法。Map.a…

盘点并发编程的12种业务场景,面试别再说你不会并发了

前言 并发编程是一项非常重要的技术&#xff0c;无论在面试&#xff0c;还是工作中出现的频率非常高。 并发编程说白了就是多线程编程&#xff0c;但多线程一定比单线程效率更高&#xff1f; 答&#xff1a;不一定&#xff0c;要看具体业务场景。 毕竟如果使用了多线程&…

力扣sql中等篇练习(十一)

力扣sql中等篇练习(十一) 1 好友申请|| :谁有最多的好友 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 出现数字次数越多,就代表它的好友越多 # 对两列数据合并时 不取出合并数据,采用UNION ALL SELECT t1.id,count(*) num FROM (SELECT request…

FreeRTOS - 计数信号量

一.任务功能 1、修改按键功能&#xff0c;模拟停车位出入功能 2、当按键按下 获取车位 3、当按键抬起 释放车位 二.API接口 函数原型SemaphoreHandle_t xSemaphoreCreateCounting( ①UBaseType_t uxMaxCount,②UBaseType_t uxInitialCount );功能概述创建计数信号量&#xff0c…

玩转ChatGPT:辅助编程

一、写在前面 首先让小Chat介绍自己在编程方面的天赋&#xff1a; 总结起来&#xff1a;TA掌握了海量的编程知识&#xff0c;能做到自动代码生成、代码审查优化、编程教学辅导以及实时问题解答。我问TA学习了多少案例&#xff0c;TA说&#xff1a;忘了&#xff0c;但保证够用。…

【Transformer系列(4)】Transformer模型结构超详细解读

前言 前一篇我们一起读了Transformer的论文《Attention Is All You Need》&#xff0c;不知道大家是否真的理解这个传说中的神&#xff08;反正俺是没有~&#xff09; 这两天我又看了一些视频讲解&#xff0c;感谢各位大佬的解读&#xff0c;让我通透了不少。 这篇文章就和…

语音交友app开发中的用户积分系统

引言 在当今数字时代&#xff0c;语音交友app已成为一种流行的社交工具。它们给用户提供了一个平台&#xff0c;在这里他们可以结交新朋友&#xff0c;分享他们的生活和信仰&#xff0c;并建立深厚的人际关系。然而&#xff0c;市场上存在大量的语音交友app&#xff0c;这使得…

深度学习--基础(一)pytorch安装--cpu

在线安装 无GPU的时候&#xff0c;只能安装CPU版本&#xff0c;打开官网 https://pytorch.org/ 直接Pip安装即可 国内访问这些下载安装会出现超时的情况&#xff0c;可以-i指定国内安装源&#xff1a; pip3.11 install torch torchvision torchaudio -i https://pypi.tuna.ts…

java版本电子招标采购系统源码—企业战略布局下的采购

​ 智慧寻源 多策略、多场景寻源&#xff0c;多种看板让寻源过程全程可监控&#xff0c;根据不同采购场景&#xff0c;采取不同寻源策略&#xff0c; 实现采购寻源线上化管控&#xff1b;同时支持公域和私域寻源。 询价比价 全程线上询比价&#xff0c;信息公开透明&#xff0…

信息安全复习四:置换密码乘积密码隐写术

一、章节梗概 置换密码、Rail Fence密码、行置换密码、乘积密码、转子机、隐写术 二、置换技术 2.1 定义 重新排列明文字母&#xff0c;达到信息加密的目的。 与替代密码不同的是&#xff0c;原来明文中的字母同样出现在密文中&#xff0c;只是顺序被打断。 古典的置换密码…

当⻉借⼒阿⾥云落地云原⽣架构转型,运维降本、效率稳定性双升

作者&#xff1a;当贝技术团队 随着业务飞速发展&#xff0c;当贝的传统 IT 资产也渐显臃肿&#xff0c;为了避免制约发展的瓶颈&#xff0c;痛定思痛&#xff0c;技术团队果断变革&#xff1a;核心业务云原生化之后&#xff0c;运维效率、整体稳定性和研发效率均得到了全面提…

【SVN】window SVN安装使用教程(服务器4.3.4版本/客户端1.11.0版本)

介绍 这里是小编成长之路的历程&#xff0c;也是小编的学习之路。希望和各位大佬们一起成长&#xff01; 以下为小编最喜欢的两句话&#xff1a; 要有最朴素的生活和最遥远的梦想&#xff0c;即使明天天寒地冻&#xff0c;山高水远&#xff0c;路远马亡。 一个人为什么要努力&a…

中台产品经理02:产品经理如何用一套方法搞定复杂业务拆解?

如果你问我作为企业级应用的产品经理日常工作最大的感受是什么&#xff1f;那就是经常会需要面对众多复杂类业务需求。 原因其实很好理解&#xff0c;B端产品通常需要支持更复杂的业务流程&#xff0c;需求也更加个性化和细分。例如&#xff0c;银行业务系统、医院管理系统、物…

CDR2023新版本安装下载教程

CDR2023是最新发布的一款强大且专业的图像设计软件,适用于平面设计、装饰设计、产品包装设计等领域。coco玛奇朵其主要功能如下: 1. 矢量图形设计:提供强大的绘图与编辑工具,支持创建和编辑各种矢量图形,如线条、曲线、矩形、椭圆、星形等。 2. 文字编辑:提供文字输入、编辑与…

C++类与对象—上

本期我们来学习类与对象 目录 面向过程和面向对象初步认识 类的引入 访问限定符 类的定义 封装 类的作用域 类的实例化 this指针 C语言和C实现Stack的对比 面向过程和面向对象初步认识 C 语言是 面向过程 的&#xff0c; 关注 的是 过程 &#xff0c;分析出求解问题的…