0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FSP库启动文件说明

RA生态工作室 2024-06-04 08:06 次阅读

本篇文章主要是介绍FSP在e2studio下生成的启动文件的代码说明,让用户对瑞萨RA MCU的启动过程有个初步了解。

wKgaomaCaumAB97XAAAGsLfviRI327.png

瑞萨灵活软件包(FSP)是一个灵活配置的软件包,旨在提供易于使用、可扩展、高质量的嵌入式系统设计软件。它适用于RA系列的MCU,提供了统一直观的API,并有详细的解释和例程应用,可以按照客户不同的需求自动生成相应驱动程序。

wKgaomaCavGAKkayAAAJQSBHiuQ788.png

启动文件是程序上电复位后执行的第一个程序。它一般包括如下几个:

1.初始化堆栈

2.使能FPU

3.定位中断向量表

4.配置系统时钟

5.启用CORTEX-M33栈监视器

6.初始化C语言运行环境

7.初始化变量SystemCoreClock,这个变量存放的是处理器时钟的频率

8.初始化用于触发NVIC中断的ELC(事件链接控制)

9.BSP初始化

wKgZomaCavyAKZ3PAAAJmU2UgZU585.png

3.1 栈区(Stack)

一种顺序数据结构,满足后进先出原则。由编译器自动分配释放,存放函数的参数值,局部变量的值等。栈特别方便用来保存/恢复调用现场。在函数被调用时,其参数也会被压入发起调用的进程栈中,并待到调用结束后,函数的返回值也会被存放回栈中。如果函数调用时,如果函数参数和局部变量较多,寄存器放不下,则需要适当增加栈区的大小。

3.2 堆区(heap)

通常由程序员手动分配,使用malloc和free进行分配和释放。注意,使用完需及时释放(free),否则容易造成内存泄漏。

3.3 e2Studio中堆栈的设置

宏“BSP_CFG_STACK_MAIN_BYTES”可以在FSP Configuration的“BSP”属性栏中的“RA Common”中通过修改“Main stack size”设置,默认为1KB(0x400 Byte)。

宏“BSP_CFG_HEAP_BYTES”可以在FSP Configuration的“BSP”属性栏中的“RA Common”中通过修改“Heap size”设置,默认为1KB(0x400 Byte)。如图3-3-1所示。

wKgZomaCbAqAYHczAAGe7HULgnM715.png

图3-3-1 堆栈区的大小设置

g_main_stack和g_heap分别代表主栈和堆区的数组,后面还有属性修饰。

“BSP_PLACE_IN_SECTION(BSP_SECTION_STACK)”,宏展开后为“__attribute__((section( “.stack”))) __attribute__((__used__))”

“BSP_PLACE_IN_SECTION(BSP_SECTION_HEAP)”,宏展开后为“__attribute__((section( “.heap”))) __attribute__((__used__))”

其修饰属性解释如下:

__attribute__((section( “参数名”))):可以将变量定义到指定的输入段“参数名”中。

__attribute__((__used__)):参数“__used__”告诉编译器,这个变量会被使用,即使在编译器优化时没有被显式地调用。这个属性可以防止编译器将未使用的函数或变量优化掉,确保它们在程序中存在。

wKgZomaCbAqARZWtAAK0GC6JoWo499.png

图3-3-2 堆栈区数组属性修饰

代码中的“BSP_ALIGN_VARIABLE(BSP_STACK_ALIGNMENT)” ,宏展开后为“__attribute__((aligned(8)))”,代表堆栈区在分配时,会按照8字节对齐方式进行。

__attribute__((weak)):用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函数,那么编译器就会执行_weak 声明的函数,并且编译器不会报错。所以我们可以在别的地方定义一个相同名字的函数。该函数不能在同一个.C文件中。

wKgaomaCbAuAIYouAASjGNj-xFI215.png

图3-3-2 函数属性宏定义

wKgaomaCa1qATWKsAAAJt8pY29I852.png

定义一个中断向量指针数组__Vectors[16],将此表放入到“.fixed_vectors”的输入段中。

wKgaomaCbAuAZ05YAANzBbFcnkk875.png

图4-1 中断向量表定义

wKgZomaCa2qAZKVFAAAI12LoT6c554.png

系统上电或复位后直接执行入口函数Reset_Handler(),包括两个函数:SystemInit()和main()。SystemInit()主要是用BSP对系统进行初始化,随后通过main函数进入用户代码。BSP负责使MCU从复位状态进入到用户的应用程序。在到达用户的应用程序之前,BSP设置堆栈、时钟、中断、C语言运行环境和堆栈监视器。

wKgZomaCbAuARAyRAABe-XT-KJI507.png

图5-1 入口函数调用

wKgaomaCa5GAGEIsAAAKxuapKCU544.pngwKgaomaCbA2AAbikAAKFHD8lmnc428.pngwKgZomaCbA2ASD7bAAJozQoy11I775.pngwKgaomaCbA2ABTxyAAE-SnN1akg588.pngwKgaomaCbA2AFhS8AALOO1fmSpw202.pngwKgZomaCbA2AdimsAAEYCmc88so078.pngwKgaomaCbA2AMV_0AAJdn2FlG-Q480.png

图6-1 系统函数初始化

wKgaomaCa6aARDQrAAAMTowHwYg098.png

通过e2studio打开Memory Usage,可以看到各段的定义名称,起止地址,占用容量大小、对齐方式等。也可以通过打开工程文件夹下\e2studio\Debug\*.map文件。

wKgaomaCa7eAP1x1AACYwKZuilI568.png

wKgZomaCbA6AcrfBAARZIddYBJY254.png

图7-1 内存函数分配

wKgaomaCa9WAawsYAAAmsw8zSpE244.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16254

    浏览量

    345674
  • 代码
    +关注

    关注

    30

    文章

    4603

    浏览量

    67390
  • FSP
    FSP
    +关注

    关注

    0

    文章

    32

    浏览量

    7046
收藏 人收藏

    评论

    相关推荐

    FSP在e2 studio下生成的启动文件的代码说明

    瑞萨灵活软件包(FSP)是一个灵活配置的软件包,旨在提供易于使用、可扩展、高质量的嵌入式系统设计软件。
    的头像 发表于 10-07 12:18 1117次阅读
    <b class='flag-5'>FSP</b>在e2 studio下生成的<b class='flag-5'>启动</b><b class='flag-5'>文件</b>的代码<b class='flag-5'>说明</b>

    用于Atom Denverton的英特尔FSP

    5th-gen-core-i5-5350u-eval-kit-fsp-user-guide.pdf(附件中)3.告诉我一个下载手册的链接,其中包含有关英特尔固件支持包(FSP)二进制文件集成过程到coreboot的
    发表于 11-07 11:10

    启动文件和HAL

    STM32F7xx —— 启动文件和HAL 目录STM32F7xx —— 启动文件和HAL
    发表于 08-04 09:25

    AVR的Protel文件 (含pcb文件)

    AVR的Protel文件 (含pcb文件)
    发表于 01-16 10:33 386次下载
    AVR的Protel<b class='flag-5'>库</b><b class='flag-5'>文件</b> (含pcb<b class='flag-5'>文件</b>)

    S7200脉冲数出MAP文件使用说明

    S7200脉冲数出MAP文件使用说明
    发表于 09-17 16:23 59次下载
    S7200脉冲数出MAP<b class='flag-5'>库</b><b class='flag-5'>文件</b>使用<b class='flag-5'>说明</b>

    USB-CAN用户编程说明及通讯文件

    USB-CAN用户编程说明及通讯文件
    发表于 12-14 17:24 3次下载

    由MATLAB的.m文件生成动态链接的方法说明

    由MATLAB的.m文件生成动态链接的方法说明
    发表于 08-16 18:54 0次下载

    称重模块文件及使用说明

    合信文件及使用实例(基于microwin)
    发表于 12-29 18:42 1次下载

    数据课件教程之数据启动与关闭讲解资料说明

    本文档的详细介绍的是数据课件教程之数据启动与关闭讲解资料说明主要内容包括了:1.数据启动
    发表于 01-24 11:34 7次下载
    数据<b class='flag-5'>库</b>课件教程之数据<b class='flag-5'>库</b>的<b class='flag-5'>启动</b>与关闭讲解资料<b class='flag-5'>说明</b>

    STM32启动过程--启动文件--分析

    STM32启动过程--启动文件--分析一、概述1、说明  每一款芯片的启动文件都值得去研究,因为
    发表于 11-30 13:21 4次下载
    STM32<b class='flag-5'>启动</b>过程--<b class='flag-5'>启动</b><b class='flag-5'>文件</b>--分析

    STM32学习记录——固件目录及文件介绍

    工程,需要先准备STM32芯片提供的库函数,包括启动的汇编文件,STM32寄存器宏定义,内核以及外设的寄存器操作函数等,按照以下目录结构放置相应STM32固件文件:├─Doc
    发表于 12-02 13:06 13次下载
    STM32学习记录——固件<b class='flag-5'>库</b>目录及<b class='flag-5'>文件</b>介绍

    STM32 之 标准外设版USB驱动详解(架构+文件+函数+使用说明+示例程序)

    STM32 之 标准外设版USB驱动详解(架构+文件+函数+使用说明+示例程序)
    发表于 12-08 20:36 0次下载
    STM32 之 标准外设版USB驱动<b class='flag-5'>库</b>详解(架构+<b class='flag-5'>文件</b>+函数+使用<b class='flag-5'>说明</b>+示例程序)

    STM32启动文件学习笔记

    STM32启动文件学习笔记一、Stack–栈EQU:宏定义的伪指令,就是给数字取一个符号名,相当于C语言中的defineSPACE:分配内存空间AREA:告诉汇编语言一个新的代码段或数据段
    发表于 12-27 18:44 2次下载
    STM32<b class='flag-5'>启动</b><b class='flag-5'>库</b><b class='flag-5'>文件</b>学习笔记

    FSP启动文件详解

    这是系统上电或复位后执行的第一个程序,使用BSP对系统进行初始化,随后通过main函数进入用户代码。 BSP负责使MCU从复位状态进入到用户的应用程序。在到达用户的应用程序之前,BSP设置栈、堆、时钟、中断、C语言运行环境和堆栈监视器。
    的头像 发表于 02-15 15:48 1143次阅读
    <b class='flag-5'>FSP</b><b class='flag-5'>库</b><b class='flag-5'>启动</b><b class='flag-5'>文件</b>详解

    MongoDB数据库文件损坏的数据恢复案例

    在MongoDB数据服务未关闭的情况下,管理员将MongoDB数据库文件从原分区拷贝到其他分区,然后将MongoDB数据所在原分区格式化,格式化完成又将MongoDB数据库文件拷回
    的头像 发表于 04-18 14:53 578次阅读
    MongoDB数据<b class='flag-5'>库文件</b>损坏的数据恢复案例