承接上文
瑞薩RA-T系列芯片馬達(dá)類工程TCM加速化設(shè)置(上)
http://m.xsypw.cn/d/6711616.html
RA8T2 sensorless方案的樣例工程;再給大家分享一個(gè)免注冊的免費(fèi)下載地址:
http://m.xsypw.cn/d/6711582.html
下面介紹一下
將馬達(dá)樣例工程進(jìn)行TCM優(yōu)化的具體步驟
以RA8T1_MCILV1_SPM_LESS_FOC_E2S_V101工程為例,首先需統(tǒng)計(jì)電流環(huán)需要的的所有函數(shù),并將它們分配到ITCM中。在本樣例工程中,這些函數(shù)分為兩類:一類是Open Source的,一類被封裝到lib文件中的。
由于涉及到的函數(shù)數(shù)量較多,現(xiàn)僅舉例說明設(shè)置方法:
如函數(shù)R_ADC_Read,其作用是讀出當(dāng)前的相電流采樣數(shù)據(jù),是整個(gè)電流環(huán)計(jì)算的開端。函數(shù)體定義在/工程根目錄/ra/fsp/src/r_adc/r_adc.c文件中。可在函數(shù)定義前增加修飾語句__attribute__((section(".itcm_data"))),將該函數(shù)指定分配到ITCM中。
示例:
__attribute__((section(".itcm_data"))) fsp_err_tR_ADC_Read(adc_ctrl_t* p_ctrl, adc_channel_tconst reg_id,uint16_t*constp_data)
ITCM起始地址為0x00000000,編譯后,查看map文件,可以確認(rèn)函數(shù)被分配到了ITCM區(qū)域中。
也可用系統(tǒng)推薦宏定義進(jìn)行設(shè)置,宏定義在工程根目錄 afspsrcspmcuallsp_compiler_support.h文件中,
具體定義如下所示:
#defineBSP_PLACE_IN_SECTION(x)_attribute__((section(x))) __attribute__((__used__))
本宏定義增加了對函數(shù)屬性的進(jìn)一步修飾,通常可用的修飾如下所示:
noinline/inline used long_call
對于函數(shù)的修飾,不是本文重點(diǎn),請查閱其他材料進(jìn)行確認(rèn)。
通常情況下,算法是公司的核心資產(chǎn)。所以存在封庫使用,或者利用第三方提供算法庫的情況。在這樣的情況下我們無法找到算法庫中的函數(shù)本體進(jìn)行設(shè)置。那我們就需要考慮將庫文件整體放入ITCM中。
如RA8T1_MCILV1_SPM_LESS_FOC_E2S_V101樣例工程,使用了三個(gè)庫文件librm_motor_current.a,librm_motor_estimate.a,librm_motor_speed.a,分別用于處理電流環(huán)、位置估算、速度環(huán)的一些算法。
要實(shí)現(xiàn)本操作,需對ld文件進(jìn)行修改。ld文件(鏈接描述文件)是控制鏈接器行為的關(guān)鍵腳本文件,主要用于管理目標(biāo)文件的內(nèi)存布局和符號(hào)解析。通過腳本指令精確控制輸入文件(.o/.a)如何組合到輸出文件(可執(zhí)行文件/庫)中,并定義程序在內(nèi)存中的布局結(jié)構(gòu)。?
在本工程的ld文件中,首先定義了存儲(chǔ)器的物理參數(shù):包括各內(nèi)存區(qū)域的起始地址、容量及訪問屬性(如可讀/寫/執(zhí)行);接著加載了必要的庫文件;通過SECTIONS指令規(guī)劃段的分布策略,明確代碼段、數(shù)據(jù)段、特殊功能段在存儲(chǔ)空間的具體位置。同時(shí)腳本還設(shè)置了關(guān)鍵的系統(tǒng)級(jí)配置:指定程序執(zhí)行的入口地址,各模塊能按預(yù)定邏輯在存儲(chǔ)器中精準(zhǔn)排布。
關(guān)于ld文件的布局,不是本文重點(diǎn),請搜索相關(guān)資源,進(jìn)行理解。
ld文件的設(shè)置需使用標(biāo)準(zhǔn)命令,本文不詳細(xì)展開,請搜索相關(guān)資源,進(jìn)行理解。
下面我們詳細(xì)介紹本次修改的操作
在工程目錄script文件夾下,打開fsp.ld文件。
在SECTIONS命令后,鏈接代碼段.text :內(nèi)刪除*(.text*)語句,更改為*(EXCLUDE_FILE(*librm_motor_estimate.a:*.o *librm_motor_current.a:*.o *librm_motor_speed.a:*.o) .text.*)。這樣在鏈接時(shí),將不對這三個(gè).o的lib文件在此處進(jìn)行鏈接。請看如下示例:
在SECTIONS命令后,在.itcm_data段內(nèi)在KEEP(*(.itcm_data*))語句下面,增加下面三個(gè)語句:
KEEP(*librm_motor_estimate.a:*.o(.text.*)) KEEP(*librm_motor_current.a:*.o(.text.*)) KEEP(*librm_motor_speed.a:*.o(.text.*))
更改后,在鏈接過程中,將這三個(gè)指定.o文件連接到itcm段。請看如下示例:
設(shè)置完成后,重新編譯工程。排查map文件,可以看到lib中的函數(shù)已經(jīng)放置到ITCM中。如位置估算這幾個(gè)函數(shù),排查如下:
然后需統(tǒng)計(jì)電流環(huán)執(zhí)行用到的所有變量,并將所有變量放置到DTCM中。由于數(shù)量較多,現(xiàn)舉例說明設(shè)置方法。
如結(jié)構(gòu)體變量g_motor_sensorless0,此變量是電流環(huán)操作的主要變量結(jié)構(gòu)體。變量定義在/工程目錄/ra_gen/hal_data.c文件中,可在變量定義前增加修飾語句__attribute__((section(".dtcm_data")))將其分配到DTCM中。
請看如下示例:
__attribute__((section(".dtcm_data")))motor_instance_tg_motor_sensorless0 = { .p_ctrl = &g_motor_sensorless0_ctrl, .p_cfg = &g_motor_sensorless0_cfg, .p_api = &g_motor_on_sensorless, };
在本應(yīng)用中,g_motor_sensorless0內(nèi)部嵌套了其他結(jié)構(gòu)體變量,那么被嵌套的其他結(jié)構(gòu)體也需要做類似聲明,分配到DTCM中。
DTCM起始地址為0x20000000,編譯后查看map文件,可以確認(rèn)變量被分配到了DTCM區(qū)域中。
因?yàn)槿鹚_官方樣例工程,用FSP架構(gòu)設(shè)置系統(tǒng)參數(shù)。所以在應(yīng)用本例程測試時(shí),需做兩個(gè)手動(dòng)設(shè)置:
1)將/工程目錄 /ra_gen/,目錄下的hal_data.c和hal_data.h文件設(shè)置為只讀屬性,這樣在每次編譯時(shí),文件中所作的更改才不會(huì)被FSP默認(rèn)設(shè)置覆蓋。
2)在進(jìn)行變量的DTCM設(shè)置時(shí),如變量具有const標(biāo)識(shí)符修飾,需將const標(biāo)識(shí)符去掉。否則,類型修改產(chǎn)生沖突,新的設(shè)置不能成功。
因?yàn)閷?shí)際應(yīng)用過程中,系統(tǒng)建立的方法各不相同,遇到上面兩種情況需注意,如自建工程,沒有相關(guān)設(shè)計(jì),則無需這兩個(gè)手動(dòng)步驟。
設(shè)置完成后,可以在電流環(huán)程序塊的出入口,分別拉高和拉低I/O口,以測試電流環(huán)執(zhí)行時(shí)間。
測試結(jié)果:為4.79us。
同等條件下,未TCM化的例程,電流環(huán)執(zhí)行時(shí)間為5.72us。
可以看到TCM化有明顯性能提升效果。
本文介紹了,在使用瑞薩RA8-T系列芯片設(shè)計(jì)馬達(dá)工程時(shí),如何將指令和變量放置到TCM單元,從而加速特定執(zhí)行的運(yùn)行速度。可以最大限度地發(fā)揮瑞薩芯片優(yōu)勢,為客戶提供更好的解決方案。
-
mcu
+關(guān)注
關(guān)注
146文章
17841瀏覽量
360512 -
瑞薩
+關(guān)注
關(guān)注
36文章
22370瀏覽量
87736 -
馬達(dá)
+關(guān)注
關(guān)注
1文章
840瀏覽量
63060 -
RA8
+關(guān)注
關(guān)注
0文章
16瀏覽量
6711 -
TCM
+關(guān)注
關(guān)注
0文章
36瀏覽量
13014
原文標(biāo)題:瑞薩RA-T系列芯片馬達(dá)類工程TCM加速化設(shè)置 (下)
文章出處:【微信號(hào):瑞薩MCU小百科,微信公眾號(hào):瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
基于瑞薩電子RA8T2 sensorless方案的樣例工程 可對電流環(huán)進(jìn)行TCM化設(shè)置
瑞薩RA-T系列芯片馬達(dá)類工程TCM加速化設(shè)置(上)提高電流環(huán)執(zhí)行速度

瑞薩RA8系列教程 | 基于 Keil 開發(fā) RA8單片機(jī)

瑞薩RA8快速上手指南:Cortex-M85內(nèi)核瑞薩RA8開發(fā)環(huán)境搭建 并點(diǎn)亮一個(gè)LED

【瑞薩**RA2L1入門學(xué)習(xí)】+**UART測試實(shí)驗(yàn)
【瑞薩RA2L1入門學(xué)習(xí)】RA2L1開發(fā)環(huán)境搭建
【瑞薩RA2L1入門學(xué)習(xí)】新建工程和串口燒寫程序
電機(jī)項(xiàng)目中瑞薩RA-T系列波形輸出占空比詳解

瑞薩RA-T系列芯片ADC和GPT功能模塊的配合使用

基于瑞薩RA6T2 MCU實(shí)現(xiàn)過電流保護(hù)功能

瑞薩e2studio(1)----瑞薩芯片之搭建FSP環(huán)境
基于瑞薩RA-T系列MCU的5KW三相圖騰柱無橋PFC設(shè)計(jì)方案

RA-T馬達(dá)工程串口直接啟動(dòng)Workbench調(diào)試方案

瑞薩RA系列MCU測量芯片的工作原理和溫度值計(jì)算方法

評論