一
FSP介紹
瑞薩靈活軟件包(FSP)是一個(gè)靈活配置的軟件包,旨在提供易于使用、可擴(kuò)展、高質(zhì)量的嵌入式系統(tǒng)設(shè)計(jì)軟件。它適用于RA系列的MCU,提供了統(tǒng)一直觀的API,并有詳細(xì)的解釋和例程應(yīng)用,可以按照客戶不同的需求自動(dòng)生成相應(yīng)驅(qū)動(dòng)程序。
二
啟動(dòng)文件說明
啟動(dòng)文件是程序上電復(fù)位后執(zhí)行的第一個(gè)程序。它一般包括如下幾個(gè):
1.初始化堆棧
2.使能FPU
3.定位中斷向量表
4.配置系統(tǒng)時(shí)鐘
5.啟用CORTEX-M33棧監(jiān)視器
6.初始化C語言運(yùn)行環(huán)境
7.初始化變量SystemCoreClock,這個(gè)變量存放的是處理器時(shí)鐘的頻率
8.初始化用于觸發(fā)NVIC中斷的ELC(事件鏈接控制)
9.BSP初始化
三
初始化堆棧
3.1 棧區(qū)(Stack)
一種順序數(shù)據(jù)結(jié)構(gòu),滿足后進(jìn)先出原則。由編譯器自動(dòng)分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等。棧特別方便用來保存/恢復(fù)調(diào)用現(xiàn)場(chǎng)。在函數(shù)被調(diào)用時(shí),其參數(shù)也會(huì)被壓入發(fā)起調(diào)用的進(jìn)程棧中,并待到調(diào)用結(jié)束后,函數(shù)的返回值也會(huì)被存放回棧中。如果函數(shù)調(diào)用時(shí),如果函數(shù)參數(shù)和局部變量較多,寄存器放不下,則需要適當(dāng)增加棧區(qū)的大小。
3.2 堆區(qū)(heap)
通常由程序員手動(dòng)分配,使用malloc和free進(jìn)行分配和釋放。注意,使用完需及時(shí)釋放(free),否則容易造成內(nèi)存泄漏。
3.3 e2 Studio中堆棧的設(shè)置
宏“BSP_CFG_STACK_MAIN_BYTES”可以在FSP Configuration的“BSP”屬性欄中的“RA Common”中通過修改“Main stack size”設(shè)置,默認(rèn)為1KB(0x400 Byte)。
宏“BSP_CFG_HEAP_BYTES”可以在FSP Configuration的“BSP”屬性欄中的“RA Common”中通過修改“Heap size”設(shè)置,默認(rèn)為1KB(0x400 Byte)。如圖3-3-1所示。
圖3-3-1 堆棧區(qū)的大小設(shè)置
g_main_stack和g_heap分別代表主棧和堆區(qū)的數(shù)組,后面還有屬性修飾。
“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( “參數(shù)名”))):可以將變量定義到指定的輸入段“參數(shù)名”中。
__attribute__((__used__)):參數(shù)“__used__”告訴編譯器,這個(gè)變量會(huì)被使用,即使在編譯器優(yōu)化時(shí)沒有被顯式地調(diào)用。這個(gè)屬性可以防止編譯器將未使用的函數(shù)或變量?jī)?yōu)化掉,確保它們?cè)诔绦蛑写嬖凇?/p>
圖3-3-2 堆棧區(qū)數(shù)組屬性修飾
代碼中的“BSP_ALIGN_VARIABLE(BSP_STACK_ALIGNMENT)” ,宏展開后為“__attribute__((aligned(8)))”,代表堆棧區(qū)在分配時(shí),會(huì)按照8字節(jié)對(duì)齊方式進(jìn)行。
__attribute__((weak)):用戶可以在用戶文件中重新定義一個(gè)同名函數(shù),最終編譯器編譯的時(shí)候,會(huì)選擇用戶定義的函數(shù),如果用戶沒有重新定義這個(gè)函數(shù),那么編譯器就會(huì)執(zhí)行_weak 聲明的函數(shù),并且編譯器不會(huì)報(bào)錯(cuò)。所以我們可以在別的地方定義一個(gè)相同名字的函數(shù)。該函數(shù)不能在同一個(gè).C文件中。
圖3-3-2 函數(shù)屬性宏定義
四
中斷向量表
定義一個(gè)中斷向量指針數(shù)組__Vectors[16],將此表放入到“.fixed_vectors”的輸入段中。
圖4-1 中斷向量表定義
五
入口程序
系統(tǒng)上電或復(fù)位后直接執(zhí)行入口函數(shù)Reset_Handler(),包括兩個(gè)函數(shù):SystemInit()和main()。SystemInit()主要是用BSP對(duì)系統(tǒng)進(jìn)行初始化,隨后通過main函數(shù)進(jìn)入用戶代碼。
BSP負(fù)責(zé)使MCU從復(fù)位狀態(tài)進(jìn)入到用戶的應(yīng)用程序。在到達(dá)用戶的應(yīng)用程序之前,BSP設(shè)置堆棧、時(shí)鐘、中斷、C語言運(yùn)行環(huán)境和堆棧監(jiān)視器。
圖5-1 入口函數(shù)調(diào)用
六
系統(tǒng)初始化
圖6-1 系統(tǒng)函數(shù)初始化
No.1
七、內(nèi)存函數(shù)分配
通過e2 studio打開Memory Usage,可以看到各段的定義名稱,起止地址,占用容量大小、對(duì)齊方式等。也可以通過打開工程文件夾下e2studioDebug*.map文件。
這里對(duì)常用的段名做個(gè)說明:
.bss:通常是指用來存放程序中未初始化的或者初始值為0的全局變量的一塊內(nèi)存區(qū)域。BSS是英文Block Started by Symbol的簡(jiǎn)稱。BSS段屬于靜態(tài)內(nèi)存分配。
.data:數(shù)據(jù)段(data segment) 通常是指用來存放程序中已初始化的全局變量的一塊內(nèi)存區(qū)域。數(shù)據(jù)段屬于靜態(tài) 內(nèi)存分配。
碼段:代碼段 (code segment/text segment) 通常是指用來存放程序執(zhí)行代碼的一塊內(nèi)存區(qū)域。這部分區(qū)域的大小在程序運(yùn)行前就已經(jīng)確定,并且內(nèi)存區(qū)域通常屬于只讀,某些架構(gòu)也允許代碼段為可寫,即允許修改程序。在代碼段中,也有可能包含一些只讀的常數(shù)變量,例如字符串常量等。
圖7-1 內(nèi)存函數(shù)分配
結(jié)論
通過本篇文章的介紹,相信大家對(duì)RA MCU的啟動(dòng)過程以及e2 studio的操作有了一定的了解,有興趣的同學(xué)也可以深入學(xué)習(xí)下。
審核編輯:劉清
-
mcu
+關(guān)注
關(guān)注
146文章
17834瀏覽量
360347 -
C語言
+關(guān)注
關(guān)注
180文章
7630瀏覽量
140305 -
中斷向量
+關(guān)注
關(guān)注
0文章
14瀏覽量
9074 -
FSP
+關(guān)注
關(guān)注
0文章
41瀏覽量
7351 -
Cortex-M33
+關(guān)注
關(guān)注
0文章
18瀏覽量
2119
原文標(biāo)題:FSP庫(kù)啟動(dòng)文件說明
文章出處:【微信號(hào):瑞薩MCU小百科,微信公眾號(hào):瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
e2studio開發(fā)環(huán)境搭建方案

e2studio和Keil簡(jiǎn)介及如何安裝e2studio開發(fā)環(huán)境

瑞薩e2studio(1)----瑞薩芯片之搭建FSP環(huán)境
e2studio更換toolchain和fsp版本
【野火啟明6M5開發(fā)板體驗(yàn)】+ e2 FSP環(huán)境搭建
瑞薩e2studio(1)----瑞薩芯片之搭建FSP環(huán)境

Renesas RA Family e2 studio 2022-07 或更高版本快速入門指南

Renesas Synergy e2 studio v2021-10 或更高版本快速入門指南

e2 studio 2024-01 RX插件智能配置程序發(fā)布說明

瑞薩e2 studio中Reality AI組件的使用方法

評(píng)論