吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

高實時性程序優化設計

先楫半導體HPMicro ? 2024-07-03 08:18 ? 次閱讀

工程苗小兵

先楫資深FAE工程師

電力電子與電力傳動專業碩士研究生,一個從事了20多年的功率控制的工程小兵,有多年的電機驅動和電源控制經驗,專注電力電子控制方向。

簡 介

先楫半導體為客戶提供了480MHz - 1GHz的不同主頻高性能MCU,適用于不同高算力、實時控制要求的場合。在電機、電源應用場合,需要us級響應和運算,對響應時間的一致性、快速性都有非常高的要求。隨著MCU主頻提高,MCU的存儲方式和總線頻率也更加多樣化,先楫MCU中內部有ILM、DLM、AXI_SRAM、flash等多種存儲空間,但同時不同存儲需要的時鐘也不同,給軟件工程師設計帶來很大困擾。先楫在官網已經提供了優化DSP和FFT運算、使用片上SRAM等相關應用文檔。

本文重點簡述基于電機、電源應用的具體代碼優化方案。

經驗分享

1

ILM程序優化

以下展示的是HPM6280的系統框圖

b034b3e4-38d1-11ef-a655-92fbcf53809c.png

CPU內部包含了ILM、DLM、cache,這些內存都可達 600Mhz主頻。AXI總線上有AXI_SRAM和ILM_SLV、DLM_SLV,訪問頻率可達200MHz,總線寬度64bit,可以cache緩存。XPI接口為QSPI總線,最高頻率133Mhz,雙沿采樣,通常只有4bit寬度。其中AHB總線還有32kbyte SRAM,但主要用于外設存儲,這里不做贅述。

b0635730-38d1-11ef-a655-92fbcf53809c.png

實際應用中程序都會放到flash中存儲,而XPI的接口速度極大限制了代碼執行效率。此外,由于XPI接口是可以cache緩存,導致XPI執行時cache命中和沒有命中的運行時間差別非常大,代碼一致性很差。為了方便客戶使用,可以生成工程時選用debug/release模式,指定程序在ILM中執行。隨后通過先楫manufacture tool可以實現鏡像功能,即生成在從FLASH 加載的RAM啟動鏡像。通過這種方式實現代碼完全在ILM中執行。

鏡像助手可將SDK中的debug/release 構建的應用轉化為FLASH啟動鏡像。

關鍵參數:

固件首地址相對容器首地址偏移

加載地址

入口點地址

b091d0ce-38d1-11ef-a655-92fbcf53809c.png

2

SEGGER編譯優化在AXI_RAM執行

由于ILM空間限制,很多電源或電機復雜應用無法將程序全部放到ILM中執行,會導致因讀取存儲速度限制了CPU算力。

HPM6200、HPM6E00系列在AXI總線的大容量SRAM可以配置成程序存儲,其中HPM6260、HPM6E60還可以將CPU1的ILM、DLM配置到AXI總線上,基本滿足了絕大部分應用。AXI RAM主頻可達200Mhz,64bit位寬,有cache緩存,可以大大減少程序讀取對CPU性能的影響。

segger編譯器可以自動生成flash加載到RAM的拷貝代碼,只要在linker文件中配置相應特性,不需要額外修改flash拷貝代碼。

在linker文件中重新劃分AXI RAM,增加代碼區域。在軟件中指定代碼生成后存放區域。

通過SDK GUI直接指定修改后的linker文件,即可實現代碼在ILM+AXIRAM中執行。

b0be2e58-38d1-11ef-a655-92fbcf53809c.png

代碼指定區域可以通過SEEGER IDE批量指定文件或文件夾的程序放置區域,也可以在函數名前面增加函數宏定義。

b0ecbb88-38d1-11ef-a655-92fbcf53809c.pngb126fc8a-38d1-11ef-a655-92fbcf53809c.png

3

GCC編譯優化在AXI_RAM執行

先楫產品支持Andes加速指令,可以加速三角函數、指數運算等復雜運行速度,但同時需要GCC編譯器支持。

在linker文件中重新劃分AXI RAM,增加代碼區域。在軟件中指定代碼生成后存放區域。

與segger編譯器不同,GCC編譯需要增加額外代碼實現flash加載到RAM的拷貝,需要修改相應的reset.c文件。

支持Andes加速指令需要引用hpm_math.h庫文件,會調用libdspf.a、libdspd.a、libdsp.a等封裝庫。由于封裝庫非明文代碼,無法通過常規方法指定代碼存放區域,導致調用該代碼時會因代碼放置在flash降低整體執行速度。需要在linker文件中額外配置響應代碼區域分配。

GCC編譯后無法像segger一樣編譯后通過圖形顯示生成代碼的占有率,且map文件閱讀性差。對gcc編譯的map文件需要引用AMAP.EXE工具。

b15589ec-38d1-11ef-a655-92fbcf53809c.png

b42bfd04-38d1-11ef-a655-92fbcf53809c.png

b45aa87a-38d1-11ef-a655-92fbcf53809c.png

GCC編譯需要增加額外代碼實現flash加載到RAM的拷貝,相應代碼位于 SOC/HPM6XXX/TOOLCHAINS/GCC/reset.c中。


在reset.c中函數c_startup實現flash到RAM程序的拷貝。

程序運行時,會以start.s開始,進入main函數之前先調用c_startup 函數完成程序搬移,在客戶的應用代碼中不會因程序放置位置不同而增加額外操作。

b49859ae-38d1-11ef-a655-92fbcf53809c.png

4

優化小知識

segger編譯器會將所有常數默認為定點數,即使該常數為小數,也需要在對應常數前加強制浮點轉換或者在常數后面加“f”做說明。

函數的inline定義在optimization level=0時是無效的,需要把優化等級設為1或更高。

建議將常用函數或變量通過attribute屬性定義到“.fast”和“.fast_ram”。

先楫MCU為多總線系統,當CPU讀寫外設時會有時鐘同步問題,建議在配置外設時盡量提高外設頻率,減少時鐘同步延遲。

HPM6260以及HPM6E60可以通過ILM_SLV、DLM_SLV接口可以將CPU1的內部存儲作為AXI_RAM使用。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17317

    瀏覽量

    352638
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10902

    瀏覽量

    213005
  • 程序優化設計

    關注

    0

    文章

    3

    瀏覽量

    1203
收藏 人收藏

    評論

    相關推薦

    關于uCos實時的疑惑

    uCos 是實時內核,但我還是有些疑問,我覺得它只能保證優先級最高任務的實時,比如,創建任務A, B, C, 優先級以此為 5,6,7void TASK_A(void *parg)
    發表于 07-24 08:23

    SHT30程序可移植不強的問題怎么優化

    針對上篇文章對于程序可移植不強的問題進行優化,基本思路是首先搭建好IIC底層驅動程序,該程序可用于任何IIC通訊設備,然后針對不同的IIC
    發表于 02-21 06:19

    什么是實時呢?影響RTOS實時的因素都有哪些呢?

    在嵌入式實時系統中,一般對實時都具有很高的要求,那么什么是實時呢?實時
    發表于 06-21 16:32

    Zephyr與FreeRTOS實時測試比較

    1、Zephyr與FreeRTOS實時測試比較分析用Rhealstone基準程序方法,分別測試Zephyr和FreeRTOS兩個RTOS的六個實時性能指標,發現Zephyr指標較差。
    發表于 08-19 16:12

    嵌入式實時程序設計中C/C++代碼的優化

    本文簡單介紹了嵌入式實時程序設計的特點和嵌入式系統設計中語言的選擇,著重介紹了以下幾種在嵌入式實時程序設計中優化 C/C++代碼的方法[關鍵
    發表于 08-07 08:47 ?15次下載

    優化電壓IGBT,優化電壓IGBT是什么意思

    優化電壓IGBT,優化電壓IGBT是什么意思 中心議題: 優化電壓IGBT
    發表于 03-24 09:49 ?1313次閱讀
    <b class='flag-5'>優化</b><b class='flag-5'>高</b>電壓IGBT,<b class='flag-5'>優化</b><b class='flag-5'>高</b>電壓IGBT是什么意思

    DSP程序優化總結

    DSP程序優化總結
    發表于 10-23 14:24 ?2次下載
    DSP<b class='flag-5'>程序</b><b class='flag-5'>優化</b>總結

    基于RTSJ的實時嵌入式系統API的優化研究

    描述了一個基于RTSJ的應用程序接口,該API的功能是提供高級的并發實時計算結構,優化實時嵌入式系統開發。同時,部署和優化(在開銷足跡/時間
    發表于 11-30 12:20 ?433次閱讀

    如何對C語言程序進行優化

    程序進行優化,通常是指優化程序代碼或程序執行速度。優化代碼和
    發表于 11-15 11:08 ?11次下載
    如何對C語言<b class='flag-5'>程序</b>進行<b class='flag-5'>優化</b>

    車輛工程基于某MATLAB地動力仿真分析報告及優化設計程序

    本文檔的主要內容詳細介紹的是車輛工程基于某MATLAB地動力仿真分析報告及優化設計程序免費下載。
    發表于 03-04 17:24 ?12次下載

    xenomai實時的影響因素及優化措施

    本文講述一些有利于提高xenomai實時的配置建議,部分針對X86架構,但它們的底層原理相通,同樣適用于其他CPU架構和系統,希望對你有用。
    的頭像 發表于 06-13 12:01 ?5306次閱讀

    實時控制系統中使用傳感器優化數據可靠的3個技巧

    實時控制系統中使用傳感器優化數據可靠的3個技巧
    發表于 10-28 11:43 ?0次下載
    在<b class='flag-5'>實時</b>控制系統中使用傳感器<b class='flag-5'>優化</b>數據可靠<b class='flag-5'>性</b>的3個技巧

    實時控制系統中使用傳感器優化數據可靠的3個技巧

    實時控制是閉環系統在定義的時間窗口內收集數據、處理數據并更新系統的能力。作為文章“實時控制簡介及其重要”的續篇,本文將詳細介紹實時控制系統的第一個功能塊“檢測(收集)數據”,并針對如
    的頭像 發表于 11-16 09:07 ?759次閱讀
    在<b class='flag-5'>實時</b>控制系統中使用傳感器<b class='flag-5'>優化</b>數據可靠<b class='flag-5'>性</b>的3個技巧

    實時控制系統中使用傳感器優化數據可靠的3個技巧

      實時控制是閉環系統在定義的時間窗口內收集數據、處理數據并更新系統的能力。作為文章“實時控制簡介及其重要”的續篇,本文將詳細介紹實時控制系統的第一個功能塊“檢測(收集)數據”,并針
    發表于 03-15 09:23 ?657次閱讀
    在<b class='flag-5'>實時</b>控制系統中使用傳感器<b class='flag-5'>優化</b>數據可靠<b class='flag-5'>性</b>的3個技巧

    如何優化MCU SPI驅動程序以實現ADC吞吐速率

    如何優化MCU SPI驅動程序以實現ADC吞吐速率
    的頭像 發表于 10-24 16:03 ?670次閱讀
    如何<b class='flag-5'>優化</b>MCU SPI驅動<b class='flag-5'>程序</b>以實現<b class='flag-5'>高</b>ADC吞吐速率
    CEO百家乐现金网| 百家乐赌的是心态吗| 帝王百家乐官网的玩法技巧和规则 | 至尊百家乐| 搓牌百家乐技巧| 玩百家乐技巧看路| 大中华百家乐官网的玩法技巧和规则 | 免费百家乐官网统计工具| 百家乐官网21点桌| 百家乐官网玩法守则| 888棋牌游戏| 大发888软件下载| 查找百家乐群| 至尊百家乐娱乐场开户注册| 百家乐吹| 百家乐娱乐城体育| 金锁玉关24山砂水断| 百家乐官网网上漏洞| 澳门百家乐官网哪家信誉最好| 大发888-娱乐网| 威尼斯人娱乐城 老品牌值得您信赖| 百家乐如何切牌好| 最新百家乐出千赌具| 百家乐开户送8彩金| 百家乐辅助分析软件| 百家乐桌蓝盾在线| 百家乐视频打牌| 百家乐如何稳赢| 大桥下做生意风水好吗| 千亿百家乐官网的玩法技巧和规则| 百家乐官网真人百家乐官网赌博| 百家乐官网怎么押钱| 百家乐官网投注之对冲投注| 什么百家乐官网平注法| 百家乐官网技巧之微笑心法| 巴登娱乐城信誉怎么样| 大发888游戏下载中心| 大发888娱乐城shouye| 大发888网页登陆| 大发888wf娱乐场下载| 天鸿德州扑克游戏币|