国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

優化TC3xx系統運行效率的策略

汽車ECU開發 ? 來源:汽車ECU開發 ? 2024-11-16 11:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

目錄

1.Tricore尋址模式

2.lsl鏈接文件Section分析

3.限定符對于代碼的影響

4.小結

1.Tricore尋址模式

今天聊個好玩的事情。 之前ARM培訓的時候,他們對于函數形參的先后順序、數據類型、對齊方式等等做了介紹,詳細分析了上述操作不同寫法對于CPU的通用寄存器使用效率上的影響,這給我留下了一點印象,但不多。 而最近我在用ADS驗英飛凌LMU、DSPR、PSRP等等訪問效率時,發現了這樣一行代碼:

#pragma section farbss lmubss
#pragma ,section,咱們都非常熟悉了,這個farbss是什么意思呢?以前做BSW還真沒多大關注這個。 查看Tasking的手冊,得到了一些答案,如下:

f2a05598-907f-11ef-a511-92fbcf53809c.png

可以看到,上述farbss這類屬于lsl里的section類型,而對于其memory 限定符則為__far,它表示遠程數據;再看其他的限定符,分別出現了__a0,__a1等等,很明顯講的是Tricore內核的尋址模式,那么順著這個思路來捋捋線索,為代碼能力和系統優化打基礎。 Tricore 1.6.2的編程模型長這樣:

f2bd716e-907f-11ef-a511-92fbcf53809c.png

總共32個通用寄存器,其中16個作為數據寄存器D[0]-D[15],16個作為地址寄存器A[0]-A[15],特別的,A[0]、A[1]、A[8]、A[9]還可以作為系統Global寄存器進行使用,我們再回過頭來看看Tasking文件里給的memory限定符,似乎有某種聯系,因此接下來我們了解Tricore的尋址模式。 Tricore是32位機,很明顯可以訪問4GBytes(2^32)的memory空間,這4GB空間分成了16個Segment[0H-FH],用地址高四位來索引,每個Segment為256MBytes,其用法如下:

f2d154e0-907f-11ef-a511-92fbcf53809c.png

所謂尋址模式,就是LoadStore這類指令訪問數據元素的機制,這些數據元素長度可以為8163264bits。Tricore提供了7種尋址模式,如下圖:

f2ddd788-907f-11ef-a511-92fbcf53809c.png

絕對尋址:主要用于I/O 外設寄存器和全局數據的訪問,值得一提的是,這種方式只能訪問每個segment的前16K,原因如下:

f2ea7b5a-907f-11ef-a511-92fbcf53809c.png

利用高四位定位segment,利用低14位定位目標,而2^14剛好為16KB,這與Tasking memory限定符__near關聯。 基地址+偏移:主要用于局部變量、靜態數據等訪問,根據偏移的不同尋址方式可以分為short offset尋址(10 bits)和long offset尋址(16bits)。long offset尋址剛好就對應__a0a1a8a9訪問。 故對于尋址方式與限定符關聯關系如下:

f303fd1e-907f-11ef-a511-92fbcf53809c.png

那這個__far到底指的是什么呢?根據手冊描述,指的是能夠訪問所有memory區域的數據,難不成這些個限定符還會對匯編代碼有所影響嗎?這些限定符與鏈接文件有沒有關聯呢?

2.lsl鏈接文件Section分析

在ADS給的lsl模板中,可以看到關于上述限定符以及對應section type的描述,例如:



/*Near Abbsolute Addressable Data Sections*/
section_layout abs18
{
group
    {
    }
}


/*Relative A0/A1/A8/A9 Addressable Sections*/
section_layout linear
{
group
    {
    }
}

  其中,abs18表示18bit絕對尋址空間,linear表示線性地址空間,如下圖所示:

f3102440-907f-11ef-a511-92fbcf53809c.png

.bss:未初始化數據

.bss_a0a1a8a9:未初始化數據,用寄存器A0A1A8A9尋址

.data:已初始化數據

.data_a0a1a8a9:已初始化的數據,用寄存器A0A1A8A9尋址

.sbss:未初始化的數據,a0尋址

.sdata:已初始化的數據,a0尋址

.zbss:未初始化數據,abs18尋址

.zdata:已初始化數據,abs18尋址

我們在Cpu0_main.c里定義兩個變量,不添加任何限定符,如下:

f3360926-907f-11ef-a511-92fbcf53809c.png

編譯生成出來的map,可以看到這兩個變量是放在.bss中: f349f152-907f-11ef-a511-92fbcf53809c.png?對應lsl定義的Far Data Section:

f35eeb66-907f-11ef-a511-92fbcf53809c.png

如果加上限定符__near,如下:

uint32 __near example_x ;
uint32 __near example_y;

  編譯出來發現已經放到了zbss段

f38aa0e4-907f-11ef-a511-92fbcf53809c.png

如果加上限定符__a0,我們會發現這時候編譯出了問題,如下:

ltc E121: relocation error in "task1": relocation value 0x50000000, type R_TRICORE_16SM, offset 0x34, section ".text.Cpu0_Main.core0_main" at address 0x800023bc is not within a 16-bit signed range from the value of A0 as defined by the symbol _SMALL_DATA_

這就意味著,如果要使用寄存器+偏移尋址的方式,那么就必須是A0A1...寄存器中內容上下偏移±32KB,例如,當A0寄存器里內容為0xD0018000時,那么通過A0寄存器尋址的所有變量就應該在0xD0010000 - 0xD001FFFF。這個場景后面構建了我們再討論,但至少我們確定了利用寄存器+偏移的方式多用于局部變量訪問。

3.限定符對于代碼的影響

第二節我們發現了利用不同限定符將變量發到不同的section里,但是變量的地址始終沒有變化,那這到底有什么用呢? 編譯出來的C代碼最終會以匯編形式展示給機器,因此我們來看看不同限定符下對于代碼的影響。 1)添加__near限定符,編譯得到的結構,代碼如下:

uint32 __near example_x ;
uint32 __near example_y;
void main(void)
{
example_x = 3;
example_y=example_x+2;
}
得到匯編代碼如下

f3969ba6-907f-11ef-a511-92fbcf53809c.png

解釋如下:

將立即數3賦給寄存器D15

D15的值直接賦給變量(x)

立即數3賦給寄存器D15

D15和2相加

將D15的值直接賦給變量(y)

統計攏共5條指令完成x=3,y=x+2這個操作; 2)添加__far限定符,得到如下

uint32 __far example_x ;
uint32 __far example_y;
void main(void)
{
example_x = 3;
example_y=example_x+2;
}
匯編代碼如下:

f3b1b2e2-907f-11ef-a511-92fbcf53809c.png

解釋如下:

x的賦值:

將0x7000給到地址寄存器A15高16bit,低位補0,這時候A15 = 0x70000000

加載有效地址到A15,因為x地址為0x70000004,故A15 = 0x70000004

將數據3移至D15;

將D15賦給A15指向的地址

y的賦值

將0x7000給到地址寄存器A15高16bit,低位補0,這時候A15 = 0x70000000

加載有效地址到A15,因為y地址為0x70000008,故A15 = 0x70000008

將數據3移至D15,并加2;

將D15賦給A15指向的地址

總計9條指令,咋一看僅僅節省了4條指令,但從統計角度來看,效率提升了44.44%,Flash消耗更少了。 同樣兩行C代碼,僅僅因為尋址方式的不同,匯編指令差異如此之大 ,從而影響系統運行效率。

4.小結

現在MCU的性能越來越強大,導致我在使用上越來越隨意,對于這種特別底層的知識非常匱乏,直到遇到了系統優化問題,才會去從這些角度來考慮。總結下來,在系統性能優化時要注意:

構建memory限定符使用場景以優化代碼執行效率;

多使用靠近CPU的memory,例如ARM TCM、Tricore DSPR、PSPR;

DCache數據一致性問題

通過調試匯編代碼,也更進一步了解了Tricore內核的運行原理;接下來,思考如何將這些理論引入到工程代碼中。

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

    關注

    31

    文章

    5607

    瀏覽量

    129806
  • 效率
    +關注

    關注

    0

    文章

    151

    瀏覽量

    20846
  • TriCore
    +關注

    關注

    0

    文章

    15

    瀏覽量

    12090

原文標題:TC3xx分析--如何提高系統運行效率

文章出處:【微信號:eng2mot,微信公眾號:汽車ECU開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    AURIX? TC3xx 電機控制電源板:設計解析與特性洞察

    AURIX? TC3xx 電機控制電源板:設計解析與特性洞察 一、引言 作為一名電子工程師,在電機控制領域不斷探索新的解決方案是我們的日常工作。今天要給大家介紹的 AURIX? TC3xx 電機控制
    的頭像 發表于 12-21 15:50 ?552次閱讀

    英飛凌AURIX? TC3xx安全應用套件快速上手

    英飛凌AURIX? TC3xx安全應用套件快速上手 在電子工程師的日常工作中,快速且有效地掌握新的硬件套件是一項必備技能。今天,我們就來探討一下英飛凌AURIX? TC3xx安全應用套件的快速啟動
    的頭像 發表于 12-19 14:30 ?473次閱讀

    CW32 MCU在高頻率運行下的系統穩定性的提升方案

    問題,并提出一系列應對措施,包括硬件設計改進和軟件優化策略,以確保系統在高頻工作環境中的可靠性和持續穩定運行。 具體內容包括: 高頻運行
    發表于 12-04 08:04

    通過優化代碼來提高MCU運行效率

    調用開銷。 使用 const 和 volatile 關鍵字,幫助編譯器進行更好的優化。 數據類型選擇 使用與MCU字長匹配的數據類型。在32位MCU上,int 和 uint32_t 的處理效率通常
    發表于 11-12 08:21

    蜂鳥E203內核優化方法

    。 修改內核參數:對蜂鳥E203的內核參數進行相應修改,可以優化內核運行效率,提高系統性能,比如調整緩存大小、內存分配策略等。 資源管理:進
    發表于 10-21 07:55

    PCIM2025論文摘要 | 針對儲能系統應用(ESS)的優化驅動器設計策略

    本論文摘要由PCIM官方授權發布1簡介本文介紹了一種用于儲能系統(ESS)的自適應驅動器優化策略,以應對過載可靠性和運行效率方面的挑戰。通過
    的頭像 發表于 08-15 17:34 ?932次閱讀
    PCIM2025論文摘要 | 針對儲能<b class='flag-5'>系統</b>應用(ESS)的<b class='flag-5'>優化</b>驅動器設計<b class='flag-5'>策略</b>

    請問如何僅使用軟件和 TC375 精簡板來測量函數調用的堆棧使用情況?

    我想測量 AURIX TriCore? TC3xx 項目的函數調用的堆棧使用情況。 我不知道該怎么做。 我知道事實上作為硬件我只有一個 TC375 lite 開發板,沒有 BlueBox 或任何
    發表于 08-08 07:28

    TC3XX 的端口可以同時被 EvADC 和 DSADC 用于 ADC 轉換嗎?

    1、TC3XX 的端口可以同時被 EvADC 和 DSADC 用于 ADC 轉換嗎? 例如,TC36X系列的AN1引腳 2、同時重新分配同一個引腳,是否會影響EVAADC和DSADC的轉換結果的精度和速度?
    發表于 08-07 08:19

    兩片TC3XX芯片之間的時鐘同步可以實現嗎?

    實現兩片TC3XX芯片之間的時鐘同步,希望兩片芯片的PWM輸出能夠同步。類似功能的芯片能實現上述操作嗎?期待你的答復。非常感謝!!!
    發表于 08-04 07:51

    TC3XX /TC1.6.2OCDS如何通過軟件啟用核心調試控制器?

    如何通過軟件啟用核心調試控制器?也就是說可以通過軟件讀取DBGSR.DE =1。參考TriCore? TM TC1.6.2 核心架構手冊第 1 卷。
    發表于 07-30 06:27

    TC397XX如何使用 EB 堆棧處理 IRQ?

    我們正在使用 TC397XX。我遇到的問題是 EB Stack 中沒有 IRQ 驅動程序。那么,我們如何使用 EB 堆棧處理 IRQ。 從哪個 AUTOSAR 版本開始,IRQ 驅動程序被刪除了?
    發表于 07-15 06:20

    請問tc3xx如何配置多個dedicatedRxBuffersNumber?

    tc3xx如何配置多個dedicatedRxBuffersNumber?
    發表于 04-21 07:53

    基于Infineon TC4D9+TLF4D985的Aurix StartKit

    狀態預測,提升續航里程、充電速度和電池壽命;牽引逆變器領域,其創新cDSP與虛擬傳感技術優化能量回收與控制策略;在電源轉換方面,TC4xx支持SiC和GaN材料,集成高效控制功能,提升系統
    的頭像 發表于 04-16 14:16 ?1260次閱讀
    基于Infineon <b class='flag-5'>TC</b>4D9+TLF4D985的Aurix StartKit

    電機大范圍調速的綜合電壓調制策略

    提高大范圍調速電機的運行效率,為系統的高效運行提供了有效途徑。 純分享帖,需要者可點擊附件獲取完整資料~~~ (免責聲明:本文系網絡轉載,版權歸原作者所有。本文所用視頻、圖片、文字如
    發表于 04-01 14:51

    嵌入式系統存儲的軟件優化策略

    上抵消單位壽命低的劣勢。 (3)NAND的相關特點 ·系統的驅動主要是由SoC廠家及系統上游邏輯決定,針對不同的NAND存儲介質無法發揮出最大優勢,或者存在驅動邏輯兼容性問題。 ·NAND容易出現位
    發表于 02-28 14:17