Titan-RA8P1板載32MB的HyperRAM用于擴(kuò)展內(nèi)存空間。
https://club.rt-thread.org/ask/article/d1cedfd3e9ece158.html
上面的帖子中介紹如何在e2sutido中結(jié)合RT-Thread的代碼倉(cāng)庫(kù)(使用的是最新的RT-Thread版本),在e2stduio中調(diào)試和下載RT-Thread工程。配置的過(guò)程繁瑣,如何進(jìn)行工程復(fù)用?可以利用e2studio的工程導(dǎo)出功能導(dǎo)出e2studio工程。再利用e2studio中的”重命名并導(dǎo)入工程”的功能實(shí)現(xiàn)工程的復(fù)用。
如果需要切換FSP版本或者RT-Thread版本,則需要重新制作一個(gè)e2studio工程模板。本文介紹使用RT-Thread V5.1版本的代碼和FSP6.2.0創(chuàng)建e2studio工程模板,并使用e2studio的重命名導(dǎo)入功能,實(shí)現(xiàn)工程復(fù)用。
目錄
RT-Thread代碼添加
創(chuàng)建e2studio工程
添加HyperRAM
好物直達(dá)
1 RT-Thread代碼添加
在RT-Thread Studio安裝RT-Thread v5.1,并從安裝路徑中使用RT-Thread代碼;

或者RT-Thread Github獲取v5.1的代碼。
https://github.com/RT-Thread/rt-thread/releases/tag/v5.1.0
這里將RT-Thread v5.1的源碼復(fù)制到rt-thread_5_1文件夾中,并和e2studio工程保持簡(jiǎn)單的相對(duì)路徑。
2 創(chuàng)建e2studio工程
實(shí)現(xiàn)串口控制臺(tái)和GPIO功能,實(shí)現(xiàn)RT-Thread功能中最小的部分作為工程模板。
2.1 FSP工程建設(shè)
在工程界面選擇FSP6.2.0和Titan-Board對(duì)應(yīng)的MCU芯片型號(hào),工程的編譯器選擇GCC。

在RTOS界面選擇”NO RTOS”,其余選項(xiàng)選擇默認(rèn)即可。

根據(jù)原理圖,串口的引腳如下:

在clock界面中使能SCI 外設(shè)的時(shí)鐘。

在FSP Configurator中的Stacks界面中添加串口模塊。

同時(shí)設(shè)置串口模塊的參數(shù)如下:

保存并生成代碼。
2.2 添加RT-Thread BSP工程中的文件
官方代碼倉(cāng)庫(kù)中對(duì)Titan RA8P1開(kāi)發(fā)板進(jìn)行適配,復(fù)制其中的部分文件到工程文件夾,用于RT-Thread代碼的配置、Scons輸出CMake信息、開(kāi)發(fā)板外設(shè)和軟件組件適配等;

通過(guò)鏈接文件夾的方式添加RT-Thread源碼到工程中

由于工程和RT-Thread的相對(duì)路徑發(fā)生變更,需要修改頂層KConfig文件中變量。
mainmenu"RT-Thread Configuration"config BSP_DIR string option env="BSP_ROOT" default"."config RTT_DIR string option env="RTT_ROOT" default"../../rt-thread_5_1"# you can change the RTT_ROOT default"../.."to your rtthread_root,# example : default"F:/git_repositories/rt-thread"config PKGS_DIR string option env="PKGS_ROOT" default"packages"config ENV_DIR string option env="ENV_ROOT" default"/"source"$RTT_DIR/Kconfig"source"$PKGS_DIR/Kconfig"source"libraries/Kconfig"source"$BSP_DIR/board/Kconfig"
復(fù)制librarys/HAL_Drivers中的部分文件到工程目錄中并保持目錄結(jié)構(gòu),用于支持開(kāi)發(fā)板的外設(shè)。

工程為保持精簡(jiǎn),board文件夾中的內(nèi)容刪除多余的文件,保留圖中的文件。刪除的文件可以后續(xù)根據(jù)功能添加。

其中的KConfig文件修改為以下內(nèi)容
mainmenu"RT-Thread Configuration"config BSP_DIR string option env="BSP_ROOT" default"."config RTT_DIR string option env="RTT_ROOT" default"../../rt-thread_5_1"# you can change the RTT_ROOT default"../.."to your rtthread_root,# example : default"F:/git_repositories/rt-thread"config PKGS_DIR string option env="PKGS_ROOT" default"packages"config ENV_DIR string option env="ENV_ROOT" default"/"source"$RTT_DIR/Kconfig"source"$PKGS_DIR/Kconfig"source"libraries/Kconfig"source"$BSP_DIR/board/Kconfig"
RT-Tread Studio工程中的SConstruct腳本中的RT-Thread源碼路徑需要根據(jù)文件路徑修改,用于后續(xù)使用scons --target=cmake指令獲取編譯的頭文件包含路徑和源文件索引信息。
ifos.path.exists('rt-thread'): RTT_ROOT = os.path.normpath(os.getcwd() +'/rt-thread')else: RTT_ROOT = os.path.normpath(os.getcwd() +'../../../rt-thread_5_1')
在工程文件夾中打開(kāi)RT-Thread提供的env控制臺(tái),輸入menuconfig指令進(jìn)入代碼配置界面,確認(rèn)KConfig文件可以正確解析。
官方示例程序提供串口和GPIO控制,無(wú)需修改,直接使用即可。如果使用官方的BSP模板進(jìn)行適配,可以參考之前的帖子進(jìn)行移植。
https://club.rt-thread.org/ask/article/d1cedfd3e9ece158.html
2.3 e2studio工程調(diào)整
首先需要修改工程編譯器的參數(shù),修改FPU Type為fpv5-sp-d16,Other target flags的參數(shù)設(shè)置為-march=armv8.1 -m.main+mve.fp+fp.dp

同時(shí)修改編譯器的優(yōu)化參數(shù)如下。

在工程屬性的Path and Symbols中,設(shè)置工程的包含路徑和源代碼管理。首先在env控制臺(tái)中運(yùn)行scons --target=cmake獲取CMakeList.txt文件,獲取RT-Thread工程的編譯信息,據(jù)此添加路徑到Path and Symbols中。在Includes添加頭文件路徑,包括Assembly和GNU C兩部分如下。


在Symbols選項(xiàng)卡中添加以下宏定義

在Source Location中添加.c源代碼路徑。結(jié)合CMakeList.txt文件中的Source文件管理,設(shè)置不同路徑的Filter選項(xiàng),將不需要的文件排除到工程的構(gòu)建外。

e2studio工程的src文件夾中的hal_warmstart.c中的代碼和RT-Thread提供的適配代碼沖突,在源碼控制中將其排除出構(gòu)建即可。
修改ra\fsp\src\bsp\cmsis\Device\RENESAS\Source\startup.c中的Reset_Handler函數(shù)如下
voidReset_Handler(void){ /* Initialize system using BSP. */ SystemInit(); /* Call user application. */#ifdefined(__GNUC__) externintentry(void); entry();#elifdefined(__ICCARM__) externvoid__low_level_init(void); __low_level_init();#else /* Jump to main. */ main();#endif while(1) { /* Infinite Loop. */ }}
在hal_entry.c添加以下代碼用于驗(yàn)證RT-Thread成功運(yùn)行。
#include#include"hal_data.h"voidhal_entry(void){ rt_kprintf("\nHello RT-Thread!\n"); rt_kprintf("==================================================\n"); rt_kprintf("This example project is RTThread Template Test!\n"); rt_kprintf("==================================================\n"); while(1) { rt_thread_mdelay(500); }}
e2studio工程生成srcipt文件夾中的fsp.ld鏈接文件通過(guò)引用文件的形式鏈接Debug文件夾中的fsp_gen.ld和memory_regions.ld。復(fù)制兩個(gè)文件中的內(nèi)容到fsp.ld中。
文件中定位到MCU Vector Table位置,添加以下內(nèi)容
/* MCU vector table */ __flash_vectors Base = .; _VECTORS = .; KEEP(*(.fixed_vectors)) KEEP(*(.application_vectors)) __flash_vectors$$Limit = .; /* section information for finsh shell */ . = ALIGN(4); __fsymtab_start = .; KEEP(*(FSymTab)) __fsymtab_end = .; . = ALIGN(4); __vsymtab_start = .; KEEP(*(VSymTab)) __vsymtab_end = .; /* section information for initial. */ . = ALIGN(4); __rt_init_start = .; KEEP(*(SORT(.rti_fn*))) __rt_init_end = .; . = ALIGN(4); KEEP(*(FalPartTable)) }> FLASH
另外定位到SDRAM區(qū)域具體可以參考工程中代碼查看,添加以下內(nèi)容
.ram.flat_nsc : { __sau_ddsc_RAM_NSC = .; }> RAM /* This symbol represents the end of user allocated RAM. The RAM after this symbol can be used at run time for things such as ThreadX memory pool allocations. */ __RAM_segment_used_end__ = ALIGN(__sau_ddsc_RAM_NSC ,4);
由于Titan-RA8P1使用的調(diào)試器是DAP固件,可以參考以下帖子在e2studio中使用PyOCD下載和調(diào)試程序。
https://club.rt-thread.org/ask/article/ee532d8d659ae45b.html
編譯并下載后,通過(guò)串口獲得如下輸出,驗(yàn)證移植成功。

2.4 工程導(dǎo)出以及重命名導(dǎo)入
利用e2studio的工程導(dǎo)出功能將移植成功的RT-Thread工程導(dǎo)出作為模板工程,進(jìn)行復(fù)用。

導(dǎo)出工程時(shí),勾選ra、ra_gen、ra_cfg中的SConscript文件的作用是在導(dǎo)出的工程中保留這些文件夾,避免FSP代碼生成工具生成代碼時(shí)覆蓋掉startup.c、fsp.ld等文件的改動(dòng)。
導(dǎo)入工程時(shí),選擇重命名并導(dǎo)入工程的選項(xiàng)。

選擇之前導(dǎo)出的工程壓縮文件、重命名并導(dǎo)入即可利用模板工程進(jìn)行開(kāi)發(fā)。

3 添加HyperRAM
板載32MB的HyperRAM,MCU通過(guò)OSPI與其通訊。導(dǎo)入之前的模板工程。
3.1 FSP添加配置
在FSP Configurator中修改設(shè)置,BSP選項(xiàng)卡中使能D-Cache,提高內(nèi)存數(shù)據(jù)傳輸速率。

clocks界面中使能OCTACLK時(shí)鐘。

在Stacks選項(xiàng)卡中添加OSPI模塊。

修改OSPI模塊的參數(shù)如下。



在Pins選項(xiàng)卡中設(shè)置OSPI外設(shè)的引腳,并修改其中數(shù)據(jù)引腳的驅(qū)動(dòng)能力和上下拉設(shè)置。

保存并生成代碼
3.2 添加HyperRAM驅(qū)動(dòng)代碼
復(fù)制官方適配的HyperRAM驅(qū)動(dòng)代碼到board\ports目錄中。

在board\Kconfig文件中添加HyperRAM配置項(xiàng)
menu"On-chip Peripheral Drivers" rsource"../libraries/HAL_Drivers/drivers/Kconfig" config BSP_USING_OSPI_RAM bool"Enable ospi HyperRAM" defaultn endmenu
env工具中進(jìn)入menuconfig界面,確認(rèn)其中使能HyperRAM,并保存配置。

使用scons --target=cmake更新編譯信息,根據(jù)其中的內(nèi)容,修改工程的Path and Symbols,添加HyperRAM相關(guān)的頭文件路徑。

由于Source Location中添加board文件夾作為源代碼索引,會(huì)自動(dòng)包含Hyperram的代碼,需要修改配置。
保存并編譯,燒錄工程到開(kāi)發(fā)板運(yùn)行。在串口控制臺(tái)中輸入help查看可用的指令。

運(yùn)行hyper_ram_test進(jìn)行RAM讀寫(xiě)測(cè)試,測(cè)試輸出結(jié)果如下

-
代碼
+關(guān)注
關(guān)注
30文章
4977瀏覽量
74414 -
RT-Thread
+關(guān)注
關(guān)注
32文章
1644瀏覽量
45262 -
HyperRAM
+關(guān)注
關(guān)注
0文章
6瀏覽量
1820
發(fā)布評(píng)論請(qǐng)先 登錄
RT-Thread記錄(二、RT-Thread內(nèi)核啟動(dòng)流程)
在RT-Thread Studio上配置rtthread CANFD驅(qū)動(dòng)來(lái)控制M3508電機(jī)
如何使用rt-thread studio中,使用 定制化的SDK建立工程?
RT-Thread Studio工程里添加文件到工程
RT-Thread Studio 安裝教程
RT-Thread Studio 主要亮點(diǎn)功能
基于RT-Thread的智慧路燈案例實(shí)驗(yàn)分享
RT-Thread Studio快速配置GPIO進(jìn)行點(diǎn)燈
RT-Thread STM32 配置系統(tǒng)時(shí)鐘(使用外部晶振)
RT-Thread Studio配置連接WIFI模塊
RT-Thread Studio驅(qū)動(dòng)SD卡
基于RT-Thread Studio學(xué)習(xí)
使用RT-Thread Studio進(jìn)行智能家居終端的設(shè)計(jì)
RT-Thread新開(kāi)發(fā)工具支持:e2studio手把手適配教程 | 技術(shù)集結(jié)
讓 RT-Thread 用上 HyperRAM——e2studio 工程配置詳解 | 技術(shù)集結(jié)
評(píng)論