工程苗小兵
先楫資深FAE工程師
電力電子與電力傳動(dòng)專業(yè)碩士研究生,一個(gè)從事了20多年的功率控制的工程小兵,有多年的電機(jī)驅(qū)動(dòng)和電源控制經(jīng)驗(yàn),專注電力電子控制方向。
簡 介
先楫半導(dǎo)體為客戶提供了480MHz - 1GHz的不同主頻高性能MCU,適用于不同高算力、實(shí)時(shí)控制要求的場合。在電機(jī)、電源應(yīng)用場合,需要us級(jí)響應(yīng)和運(yùn)算,對響應(yīng)時(shí)間的一致性、快速性都有非常高的要求。隨著MCU主頻提高,MCU的存儲(chǔ)方式和總線頻率也更加多樣化,先楫MCU中內(nèi)部有ILM、DLM、AXI_SRAM、flash等多種存儲(chǔ)空間,但同時(shí)不同存儲(chǔ)需要的時(shí)鐘也不同,給軟件工程師設(shè)計(jì)帶來很大困擾。先楫在官網(wǎng)已經(jīng)提供了優(yōu)化DSP和FFT運(yùn)算、使用片上SRAM等相關(guān)應(yīng)用文檔。
本文重點(diǎn)簡述基于電機(jī)、電源應(yīng)用的具體代碼優(yōu)化方案。
經(jīng)驗(yàn)分享
1
ILM程序優(yōu)化
以下展示的是HPM6280的系統(tǒng)框圖
CPU內(nèi)部包含了ILM、DLM、cache,這些內(nèi)存都可達(dá) 600Mhz主頻。AXI總線上有AXI_SRAM和ILM_SLV、DLM_SLV,訪問頻率可達(dá)200MHz,總線寬度64bit,可以cache緩存。XPI接口為QSPI總線,最高頻率133Mhz,雙沿采樣,通常只有4bit寬度。其中AHB總線還有32kbyte SRAM,但主要用于外設(shè)存儲(chǔ),這里不做贅述。
實(shí)際應(yīng)用中程序都會(huì)放到flash中存儲(chǔ),而XPI的接口速度極大限制了代碼執(zhí)行效率。此外,由于XPI接口是可以cache緩存,導(dǎo)致XPI執(zhí)行時(shí)cache命中和沒有命中的運(yùn)行時(shí)間差別非常大,代碼一致性很差。為了方便客戶使用,可以生成工程時(shí)選用debug/release模式,指定程序在ILM中執(zhí)行。隨后通過先楫manufacture tool可以實(shí)現(xiàn)鏡像功能,即生成在從FLASH 加載的RAM啟動(dòng)鏡像。通過這種方式實(shí)現(xiàn)代碼完全在ILM中執(zhí)行。
鏡像助手可將SDK中的debug/release 構(gòu)建的應(yīng)用轉(zhuǎn)化為FLASH啟動(dòng)鏡像。
關(guān)鍵參數(shù):
固件首地址相對容器首地址偏移
加載地址
入口點(diǎn)地址
2
SEGGER編譯優(yōu)化在AXI_RAM執(zhí)行
由于ILM空間限制,很多電源或電機(jī)復(fù)雜應(yīng)用無法將程序全部放到ILM中執(zhí)行,會(huì)導(dǎo)致因讀取存儲(chǔ)速度限制了CPU算力。
HPM6200、HPM6E00系列在AXI總線的大容量SRAM可以配置成程序存儲(chǔ),其中HPM6260、HPM6E60還可以將CPU1的ILM、DLM配置到AXI總線上,基本滿足了絕大部分應(yīng)用。AXI RAM主頻可達(dá)200Mhz,64bit位寬,有cache緩存,可以大大減少程序讀取對CPU性能的影響。
segger編譯器可以自動(dòng)生成flash加載到RAM的拷貝代碼,只要在linker文件中配置相應(yīng)特性,不需要額外修改flash拷貝代碼。
在linker文件中重新劃分AXI RAM,增加代碼區(qū)域。在軟件中指定代碼生成后存放區(qū)域。
通過SDK GUI直接指定修改后的linker文件,即可實(shí)現(xiàn)代碼在ILM+AXIRAM中執(zhí)行。
代碼指定區(qū)域可以通過SEEGER IDE批量指定文件或文件夾的程序放置區(qū)域,也可以在函數(shù)名前面增加函數(shù)宏定義。
3
GCC編譯優(yōu)化在AXI_RAM執(zhí)行
先楫產(chǎn)品支持Andes加速指令,可以加速三角函數(shù)、指數(shù)運(yùn)算等復(fù)雜運(yùn)行速度,但同時(shí)需要GCC編譯器支持。
在linker文件中重新劃分AXI RAM,增加代碼區(qū)域。在軟件中指定代碼生成后存放區(qū)域。
與segger編譯器不同,GCC編譯需要增加額外代碼實(shí)現(xiàn)flash加載到RAM的拷貝,需要修改相應(yīng)的reset.c文件。
支持Andes加速指令需要引用hpm_math.h庫文件,會(huì)調(diào)用libdspf.a、libdspd.a、libdsp.a等封裝庫。由于封裝庫非明文代碼,無法通過常規(guī)方法指定代碼存放區(qū)域,導(dǎo)致調(diào)用該代碼時(shí)會(huì)因代碼放置在flash降低整體執(zhí)行速度。需要在linker文件中額外配置響應(yīng)代碼區(qū)域分配。
GCC編譯后無法像segger一樣編譯后通過圖形顯示生成代碼的占有率,且map文件閱讀性差。對gcc編譯的map文件需要引用AMAP.EXE工具。
GCC編譯需要增加額外代碼實(shí)現(xiàn)flash加載到RAM的拷貝,相應(yīng)代碼位于 SOC/HPM6XXX/TOOLCHAINS/GCC/reset.c中。
在reset.c中函數(shù)c_startup實(shí)現(xiàn)flash到RAM程序的拷貝。
程序運(yùn)行時(shí),會(huì)以start.s開始,進(jìn)入main函數(shù)之前先調(diào)用c_startup 函數(shù)完成程序搬移,在客戶的應(yīng)用代碼中不會(huì)因程序放置位置不同而增加額外操作。
4
優(yōu)化小知識(shí)
segger編譯器會(huì)將所有常數(shù)默認(rèn)為定點(diǎn)數(shù),即使該常數(shù)為小數(shù),也需要在對應(yīng)常數(shù)前加強(qiáng)制浮點(diǎn)轉(zhuǎn)換或者在常數(shù)后面加“f”做說明。
函數(shù)的inline定義在optimization level=0時(shí)是無效的,需要把優(yōu)化等級(jí)設(shè)為1或更高。
建議將常用函數(shù)或變量通過attribute屬性定義到“.fast”和“.fast_ram”。
先楫MCU為多總線系統(tǒng),當(dāng)CPU讀寫外設(shè)時(shí)會(huì)有時(shí)鐘同步問題,建議在配置外設(shè)時(shí)盡量提高外設(shè)頻率,減少時(shí)鐘同步延遲。
HPM6260以及HPM6E60可以通過ILM_SLV、DLM_SLV接口可以將CPU1的內(nèi)部存儲(chǔ)作為AXI_RAM使用。
-
mcu
+關(guān)注
關(guān)注
146文章
17834瀏覽量
360367 -
cpu
+關(guān)注
關(guān)注
68文章
11033瀏覽量
215991 -
程序優(yōu)化設(shè)計(jì)
+關(guān)注
關(guān)注
0文章
3瀏覽量
1248
發(fā)布評論請先 登錄
關(guān)于uCos實(shí)時(shí)性的疑惑
SHT30程序可移植性不強(qiáng)的問題怎么優(yōu)化
什么是實(shí)時(shí)性呢?影響RTOS實(shí)時(shí)性的因素都有哪些呢?
Zephyr與FreeRTOS實(shí)時(shí)性測試比較
嵌入式實(shí)時(shí)程序設(shè)計(jì)中C/C++代碼的優(yōu)化
優(yōu)化高電壓IGBT,優(yōu)化高電壓IGBT是什么意思

基于RTSJ的實(shí)時(shí)嵌入式系統(tǒng)API的優(yōu)化研究
如何對C語言程序進(jìn)行優(yōu)化

車輛工程基于某MATLAB地動(dòng)力性仿真分析報(bào)告及優(yōu)化設(shè)計(jì)程序
xenomai實(shí)時(shí)性的影響因素及優(yōu)化措施
在實(shí)時(shí)控制系統(tǒng)中使用傳感器優(yōu)化數(shù)據(jù)可靠性的3個(gè)技巧

在實(shí)時(shí)控制系統(tǒng)中使用傳感器優(yōu)化數(shù)據(jù)可靠性的3個(gè)技巧

在實(shí)時(shí)控制系統(tǒng)中使用傳感器優(yōu)化數(shù)據(jù)可靠性的3個(gè)技巧

如何優(yōu)化MCU SPI驅(qū)動(dòng)程序以實(shí)現(xiàn)高ADC吞吐速率

評論