瑞薩RA-T系列芯片馬達類工程TCM加速化設置

本篇介紹在使用RA8-T系列芯片,建立馬達類工程應用時,如何將電流環部分的指令和變量設置到TCM單元,以提高電流環執行速度,從而提高系統整體的運行性能,在伺服和高端工業領域有很高的實用價值。本文以RA8T1為范例,亦可推廣到具備TCM功能的RA8-T系列其他芯片和相關領域。


瑞薩新產品RA8-T系列芯片,采用Cortex-M85內核,并具有直接與處理器核心耦合的片上存儲器TCM,通過專用接口訪問,相比普通RAM或緩存,能提供更快的訪問速度和較低的延遲和確定性訪問。在RA8T1中,配置64KB(8KB×8 block)的ITCM和64KB(8KB×8 block)的DTCM。請參看數據手冊,可以看到TCM在RA8T1的實際地址。




ITCM和DTCM分別用于存儲指令和數據,以優化程序執行性能。在馬達控制這種對實時性要求更高的應用中,可以將電流環等關鍵環節的指令和變量放到TCM中,提高執行速度,從而提高系統整體性能。

本文以瑞薩RA8T1官方樣例工程RA8T1_MCILV1_SPM_LESS_FOC_E2S_V101為基礎,對電流環進行TCM化設置,相關操作可推廣到RA系列搭載TCM的其他芯片,和對應的示例軟件工程。
RA8T2 sensorless方案的樣例工程
?

當前工程測試環境及工具,獲取鏈接如下所示:

IDE:版本:e2studio 2025-01
工具鏈:版本:13.2.1.arm-13-7。該版本可通過e2studio進行集成化安裝。
FSP:版本:5.6.0
測試軟件適配瑞薩官方開發套件MCK-RA8T1:該套件的相關資料可在瑞薩官網下載,鏈接:MCK-RA8T1 User's Manual。套件由CPU板、驅動板、通信板、樣例電機及相關配件組成。



可按如下圖示,參考用戶手冊搭建系統,調試馬達工程。系統電源推薦DC24V,請另行準備。



將馬達樣例工程進行TCM優化的具體步驟

以RA8T1_MCILV1_SPM_LESS_FOC_E2S_V101工程為例,首先需統計電流環需要的的所有函數,并將它們分配到ITCM中。在本樣例工程中,這些函數分為兩類:一類是Open Source的,一類被封裝到lib文件中的

由于涉及到的函數數量較多,現僅舉例說明設置方法:
如函數R_ADC_Read,其作用是讀出當前的相電流采樣數據,是整個電流環計算的開端。函數體定義在/工程根目錄/ra/fsp/src/r_adc/r_adc.c文件中。可在函數定義前增加修飾語句__attribute__((section(".itcm_data"))),將該函數指定分配到ITCM中。
示例:

__attribute__((section(".itcm_data")))
fsp_err_tR_ADC_Read(adc_ctrl_t * p_ctrl, adc_channel_tconst reg_id, uint16_t * const p_data)


ITCM起始地址為0x00000000,編譯后,查看map文件,可以確認函數被分配到了ITCM區域中。



也可用系統推薦宏定義進行設置,宏定義在\工程根目錄\ra\fsp\src\bsp\mcu\all\bsp_compiler_support.h文件中,具體定義如下所示:

#defineBSP_PLACE_IN_SECTION(x)_attribute__((section(x))) __attribute__((__used__))


本宏定義增加了對函數屬性的進一步修飾,通常可用的修飾如下所示:

noinline/inline
used
long_call


對于函數的修飾,不是本文重點,請查閱其他材料進行確認。您可點擊?【GUN】Function-Attributes_gun編譯器高級屬性-CSDN博客 獲得相關信息。

通常情況下,算法是公司的核心資產。所以存在封庫使用,或者利用第三方提供算法庫的情況。在這樣的情況下我們無法找到算法庫中的函數本體進行設置。那我們就需要考慮將庫文件整體放入ITCM中

如RA8T1_MCILV1_SPM_LESS_FOC_E2S_V101樣例工程,使用了三個庫文件librm_motor_current.a,librm_motor_estimate.a,librm_motor_speed.a,分別用于處理電流環、位置估算、速度環的一些算法。

要實現本操作,需對ld文件進行修改。ld文件(鏈接描述文件)是控制鏈接器行為的關鍵腳本文件,主要用于管理目標文件的內存布局和符號解析。通過腳本指令精確控制輸入文件(.o/.a)如何組合到輸出文件(可執行文件/庫)中,并定義程序在內存中的布局結構。?

在本工程的ld文件中,首先定義了存儲器的物理參數:包括各內存區域的起始地址、容量及訪問屬性(如可讀/寫/執行);接著加載了必要的庫文件;通過SECTIONS指令規劃段的分布策略,明確代碼段、數據段、特殊功能段在存儲空間的具體位置。同時腳本還設置了關鍵的系統級配置:指定程序執行的入口地址,各模塊能按預定邏輯在存儲器中精準排布。

關于ld文件的布局,不是本文重點,請搜索相關資源,進行理解。比如鏈接文章:LD文件詳解-Asp1rant-博客園。

ld文件的設置需使用標準命令,本文不詳細展開,請點擊相關資源,進行理解。

下面我們詳細介紹本次修改的操作


在工程目錄script文件夾下,打開fsp.ld文件。

在SECTIONS命令后,鏈接代碼段.text :內刪除*(.text*)語句,更改為*(EXCLUDE_FILE(*librm_motor_estimate.a:*.o *librm_motor_current.a:*.o *librm_motor_speed.a:*.o) .text.*)。這樣在鏈接時,將不對這三個.o的lib文件在此處進行鏈接。請看如下示例:



在SECTIONS命令后,在.itcm_data段內在KEEP(*(.itcm_data*))語句下面,增加下面三個語句:

KEEP(*librm_motor_estimate.a:*.o(.text.*))
KEEP(*librm_motor_current.a:*.o(.text.*))
KEEP(*librm_motor_speed.a:*.o(.text.*))

更改后,在鏈接過程中,將這三個指定.o文件連接到itcm段。請看如下示例:



設置完成后,重新編譯工程。排查map文件,可以看到lib中的函數已經放置到ITCM中。如位置估算這幾個函數,排查如下:



然后需統計電流環執行用到的所有變量,并將所有變量放置到DTCM中。由于數量較多,現舉例說明設置方法。

如結構體變量g_motor_sensorless0,此變量是電流環操作的主要變量結構體。變量定義在/工程目錄/ra_gen/hal_data.c文件中,可在變量定義前增加修飾語句__attribute__((section(".dtcm_data")))將其分配到DTCM中。
請看如下示例:

__attribute__((section(".dtcm_data"))) motor_instance_t g_motor_sensorless0 =
{ .p_ctrl = &g_motor_sensorless0_ctrl, .p_cfg = &g_motor_sensorless0_cfg, .p_api = &g_motor_on_sensorless, };


在本應用中,g_motor_sensorless0內部嵌套了其他結構體變量,那么被嵌套的其他結構體也需要做類似聲明,分配到DTCM中。
?

DTCM起始地址為0x20000000,編譯后查看map文件,可以確認變量被分配到了DTCM區域中。




因為瑞薩官方樣例工程,用FSP架構設置系統參數。所以在應用本例程測試時,需做兩個手動設置:
1)將/工程目錄 /ra_gen/,目錄下的hal_data.c和hal_data.h文件設置為只讀屬性,這樣在每次編譯時,文件中所作的更改才不會被FSP默認設置覆蓋。
2)在進行變量的DTCM設置時,如變量具有const標識符修飾,需將const標識符去掉。否則,類型修改產生沖突,新的設置不能成功。

因為實際應用過程中,系統建立的方法各不相同,遇到上面兩種情況需注意,如自建工程,沒有相關設計,則無需這兩個手動步驟。
?

設置完成后,可以在電流環程序塊的出入口,分別拉高和拉低I/O口,以測試電流環執行時間。

測試結果:為4.79us。



同等條件下,未TCM化的例程,電流環執行時間為5.72us。
可以看到TCM化有明顯性能提升效果。


?

本文介紹了,在使用瑞薩RA8-T系列芯片設計馬達工程時,如何將指令和變量放置到TCM單元,從而加速特定執行的運行速度。可以最大限度地發揮瑞薩芯片優勢,為客戶提供更好的解決方案。


文章來源:RA生態工作室https://www.ramcu.cn/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83636.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83636.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83636.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

獲取Unity節點路徑

解決目的: 避免手動拼寫節點路徑的時候,出現路徑錯誤導致獲取不到節點的情況。解決效果: 添加如下腳本之后,將自動復制路徑到剪貼板中,在代碼中通過 ctrlv 粘貼路徑代碼如下: public class CustomMenuItems…

Docker 安裝 Oracle 12C

鏡像 https://docker.aityp.com/image/docker.io/truevoly/oracle-12c:latest docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/truevoly/oracle-12c:latest docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/truevoly/oracle-12c:latest d…

Linux內核網絡協議注冊與初始化:從proto_register到tcp_v4_init_sock的深度解析

一、協議注冊:proto_register的核心使命 在Linux網絡協議棧中,proto_register是協議初始化的基石,主要完成三項關鍵任務: Slab緩存創建(內存管理核心) prot->slab = kmem_cache_create_usercopy(prot->name, prot->obj_size, ...); if (prot->twsk_prot) pr…

GD32 MCU的真隨機數發生器(TRNG)

GD32 MCU的真隨機數發生器(TRNG) 文章目錄 GD32 MCU的真隨機數發生器(TRNG)一、定義與核心特征二、物理機制:量子與經典隨機性三、生成方法四、應用場景五、與偽隨機數的對比六、局限性?? 七、物理熵源原理?? 八、硬件實現流程(以GD32F450 GD32L233為例)8.1. **初始…

Vulkan學習筆記6—渲染呈現

一、渲染循環核心 while (!glfwWindowShouldClose(window)) {glfwPollEvents();helloTriangleApp.drawFrame(); // 繪制幀} 在 Vulkan 中渲染幀包含一組常見的步驟 等待前一幀完成(vkWaitForFences) 從交換鏈獲取圖像(vkAcquireNextImageKH…

React第六十二節 Router中 createStaticRouter 的使用詳解

前言 createStaticRouter 是 React Router 專為 服務端渲染(SSR) 設計的 API,用于在服務器端處理路由匹配和數據加載。它在構建靜態 HTML 響應時替代了客戶端的 BrowserRouter,確保 SSR 和客戶端 Hydration 的路由狀態一致。 一…

qt 雙緩沖案例對比

雙緩沖 1.雙緩沖原理 單緩沖:在paintEvent中直接繪制到屏幕,繪制過程被用戶看到 雙緩沖:先在redrawBuffer繪制到緩沖區,然后一次性顯示完整結果 代碼結構 單緩沖:所有繪制邏輯在paintEvent中 雙緩沖:繪制…

華為云AI開發平臺ModelArts

華為云ModelArts:重塑AI開發流程的“智能引擎”與“創新加速器”! 在人工智能浪潮席卷全球的2025年,企業擁抱AI的意愿空前高漲,但技術門檻高、流程復雜、資源投入巨大的現實,卻讓許多創新構想止步于實驗室。數據科學家…

ParaGraphX [特殊字符]

https://github.com/stevechampion1/paragraphx 一個基于 JAX 的、為 CPU/GPU 加速而生的超高性能圖算法庫。 ParaGraphX 是一個實驗性的 Python 庫,旨在利用 JAX 的即時編譯 (JIT) 和大規模并行計算能力,為經典的圖算法提供驚人的性能提升。我們的目標…

如何用4 種可靠的方法更換 iPhone(2025 年指南)

Apple 每年都會發布新版本的 iPhone。升級到新 iPhone 是一種令人興奮的體驗,但轉移所有寶貴數據的想法有時會讓人感到畏懼。幸運的是,我們準備了 4 種有效的更換 iPhone 的方法,讓你可以毫不費力地更換到你的新 iPhone。 此外,您…

GitLab 拉取變慢的原因及排查方法

前言:在軟件開發的快節奏世界里,高效協作與快速交付是制勝關鍵。然而,當開發團隊興高采烈地投入工作,卻發現從GitLab拉取代碼的速度慢如蝸牛,那種沮喪感簡直能瞬間澆滅熱情。在分布式開發環境中,這種情況時…

落水人員目標檢測數據集(貓臉碼客第253期)

落水人員目標檢測:科技守護生命之舟 一、背景與意義 隨著人類海洋活動和水上活動的日益頻繁,海上與水域安全事故頻發。每年都會開展大量的海上救援行動,以搜救數以萬計的落難人員。在水上活動區域,如水庫、河道等,溺…

JAVA_強制類型轉換:

類型范圍大的變量,不可以直接賦值給類型變量小的變量 需要進行強制類型轉換: 想要完成類型范圍大的變量傳給類型范圍小的變量需要先創建一個新的變量(類型與方法的形參類型要相同)。將類型范圍大的變量前面加上(轉換類…

打卡第44天:無人機數據集分類

重復以下內容 作業: kaggle找到一個圖像數據集,用cnn網絡進行訓練并且用grad-cam做可視化 進階: 并拆分成多個文件 import os import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader,…

個人網站大更新,還是有個總站比較好

個人網站大更新,還是有個總站比較好 放棄了所有框架,用純htmlcssjs擼了個網站,這回可以想改啥改啥了。 選擇了黑紫作為主色調,暫時看著還算可以。 為什么不用那些框架了 幾個原因: 嘗試用vuepress、vitepress、not…

高精度算法詳解:從原理到加減乘除的完整實現

文章目錄 一、為什么需要高精度算法二、高精度算法的數據結構設計2.1 基礎工具函數2.2 高精度加法實現2.3 高精度減法實現2.4 高精度乘法實現2.5 高精度除法實現 三、完整測試程序四、總結 一、為什么需要高精度算法 在編程中,處理極大數值是常見需求,例…

排序--計數排序

一,引言 計數排序是一種針對整數數據的高效排序算法。其主要流程可分為三個步驟:首先計算整數數據的數值范圍;接著按大小順序統計各數值的出現次數;最后根據統計結果輸出排序后的數據序列。 二,求最值 遍歷現有數據,獲取最大值…

Kubernetes安全機制深度解析(四):動態準入控制和Webhook

#作者:程宏斌 文章目錄 動態準入控制什么是準入 Webhook? 嘗試準入Webhook先決條件編寫一個準入 Webhook 服務器部署準入 Webhook 服務即時配置準入 Webhook對 API 服務器進行身份認證 Webhook 請求與響應Webhook 配置匹配請求-規則匹配請求&#xff1a…

WDK 10.0.19041.685,可在32位win7 sp1系統下搭配vs2019使用,可以編譯出xp驅動。

(14)[驅動開發]配置環境 VS2019 WDK10 寫 xp驅動 (14)[驅動開發]配置環境 VS2019 WDK10 寫 xp驅動_microsoft visual 2019 wdk-CSDN博客文章瀏覽閱讀3k次,點贊8次,收藏17次。本文介紹了如何在VS2019環境下安裝和配置Windows Driver Kit(WDK)&#xff0…

論壇系統自動化測試

1、項目背景與測試目標 系統定位 論壇系統作為典型的高并發Web應用,需支持用戶注冊、登錄、發帖、評論、私信及個人中心管理等核心功能,是用戶公開交流與信息共享的核心平臺。其穩定性與響應效率直接影響用戶體驗及平臺活躍度。 測試必要性 功能可靠性&…