91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

優(yōu)化TC3xx系統(tǒng)運(yùn)行效率的策略

汽車(chē)ECU開(kāi)發(fā) ? 來(lái)源:汽車(chē)ECU開(kāi)發(fā) ? 2024-11-16 11:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

目錄

1.Tricore尋址模式

2.lsl鏈接文件Section分析

3.限定符對(duì)于代碼的影響

4.小結(jié)

1.Tricore尋址模式

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

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

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

可以看到,上述farbss這類(lèi)屬于lsl里的section類(lèi)型,而對(duì)于其memory 限定符則為_(kāi)_far,它表示遠(yuǎn)程數(shù)據(jù);再看其他的限定符,分別出現(xiàn)了__a0,__a1等等,很明顯講的是Tricore內(nèi)核的尋址模式,那么順著這個(gè)思路來(lái)捋捋線索,為代碼能力和系統(tǒng)優(yōu)化打基礎(chǔ)。 Tricore 1.6.2的編程模型長(zhǎng)這樣:

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

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

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

所謂尋址模式,就是LoadStore這類(lèi)指令訪問(wèn)數(shù)據(jù)元素的機(jī)制,這些數(shù)據(jù)元素長(zhǎng)度可以為8163264bits。Tricore提供了7種尋址模式,如下圖:

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

絕對(duì)尋址:主要用于I/O 外設(shè)寄存器和全局?jǐn)?shù)據(jù)的訪問(wèn),值得一提的是,這種方式只能訪問(wèn)每個(gè)segment的前16K,原因如下:

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

利用高四位定位segment,利用低14位定位目標(biāo),而2^14剛好為16KB,這與Tasking memory限定符__near關(guān)聯(lián)。 基地址+偏移:主要用于局部變量、靜態(tài)數(shù)據(jù)等訪問(wèn),根據(jù)偏移的不同尋址方式可以分為short offset尋址(10 bits)和long offset尋址(16bits)。long offset尋址剛好就對(duì)應(yīng)__a0a1a8a9訪問(wèn)。 故對(duì)于尋址方式與限定符關(guān)聯(lián)關(guān)系如下:

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

那這個(gè)__far到底指的是什么呢?根據(jù)手冊(cè)描述,指的是能夠訪問(wèn)所有memory區(qū)域的數(shù)據(jù),難不成這些個(gè)限定符還會(huì)對(duì)匯編代碼有所影響嗎?這些限定符與鏈接文件有沒(méi)有關(guān)聯(lián)呢?

2.lsl鏈接文件Section分析

在ADS給的lsl模板中,可以看到關(guān)于上述限定符以及對(duì)應(yīng)section type的描述,例如:



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


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

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

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

.bss:未初始化數(shù)據(jù)

.bss_a0a1a8a9:未初始化數(shù)據(jù),用寄存器A0A1A8A9尋址

.data:已初始化數(shù)據(jù)

.data_a0a1a8a9:已初始化的數(shù)據(jù),用寄存器A0A1A8A9尋址

.sbss:未初始化的數(shù)據(jù),a0尋址

.sdata:已初始化的數(shù)據(jù),a0尋址

.zbss:未初始化數(shù)據(jù),abs18尋址

.zdata:已初始化數(shù)據(jù),abs18尋址

我們?cè)贑pu0_main.c里定義兩個(gè)變量,不添加任何限定符,如下:

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

編譯生成出來(lái)的map,可以看到這兩個(gè)變量是放在.bss中: f349f152-907f-11ef-a511-92fbcf53809c.png?對(duì)應(yīng)lsl定義的Far Data Section:

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

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

uint32 __near example_x ;
uint32 __near example_y;

  編譯出來(lái)發(fā)現(xiàn)已經(jīng)放到了zbss段

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

如果加上限定符__a0,我們會(huì)發(fā)現(xiàn)這時(shí)候編譯出了問(wèn)題,如下:

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...寄存器中內(nèi)容上下偏移±32KB,例如,當(dāng)A0寄存器里內(nèi)容為0xD0018000時(shí),那么通過(guò)A0寄存器尋址的所有變量就應(yīng)該在0xD0010000 - 0xD001FFFF。這個(gè)場(chǎng)景后面構(gòu)建了我們?cè)儆懻?,但至少我們確定了利用寄存器+偏移的方式多用于局部變量訪問(wèn)。

3.限定符對(duì)于代碼的影響

第二節(jié)我們發(fā)現(xiàn)了利用不同限定符將變量發(fā)到不同的section里,但是變量的地址始終沒(méi)有變化,那這到底有什么用呢? 編譯出來(lái)的C代碼最終會(huì)以匯編形式展示給機(jī)器,因此我們來(lái)看看不同限定符下對(duì)于代碼的影響。 1)添加__near限定符,編譯得到的結(jié)構(gòu),代碼如下:

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

解釋如下:

將立即數(shù)3賦給寄存器D15

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

立即數(shù)3賦給寄存器D15

D15和2相加

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

統(tǒng)計(jì)攏共5條指令完成x=3,y=x+2這個(gè)操作; 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,低位補(bǔ)0,這時(shí)候A15 = 0x70000000

加載有效地址到A15,因?yàn)閤地址為0x70000004,故A15 = 0x70000004

將數(shù)據(jù)3移至D15;

將D15賦給A15指向的地址

y的賦值

將0x7000給到地址寄存器A15高16bit,低位補(bǔ)0,這時(shí)候A15 = 0x70000000

加載有效地址到A15,因?yàn)閥地址為0x70000008,故A15 = 0x70000008

將數(shù)據(jù)3移至D15,并加2;

將D15賦給A15指向的地址

總計(jì)9條指令,咋一看僅僅節(jié)省了4條指令,但從統(tǒng)計(jì)角度來(lái)看,效率提升了44.44%,F(xiàn)lash消耗更少了。 同樣兩行C代碼,僅僅因?yàn)閷ぶ贩绞降牟煌?,匯編指令差異如此之大 ,從而影響系統(tǒng)運(yùn)行效率。

4.小結(jié)

現(xiàn)在MCU的性能越來(lái)越強(qiáng)大,導(dǎo)致我在使用上越來(lái)越隨意,對(duì)于這種特別底層的知識(shí)非常匱乏,直到遇到了系統(tǒng)優(yōu)化問(wèn)題,才會(huì)去從這些角度來(lái)考慮??偨Y(jié)下來(lái),在系統(tǒng)性能優(yōu)化時(shí)要注意:

構(gòu)建memory限定符使用場(chǎng)景以?xún)?yōu)化代碼執(zhí)行效率;

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

DCache數(shù)據(jù)一致性問(wèn)題

通過(guò)調(diào)試匯編代碼,也更進(jìn)一步了解了Tricore內(nèi)核的運(yùn)行原理;接下來(lái),思考如何將這些理論引入到工程代碼中。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5608

    瀏覽量

    130012
  • 效率
    +關(guān)注

    關(guān)注

    0

    文章

    151

    瀏覽量

    20877
  • TriCore
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    12097

原文標(biāo)題:TC3xx分析--如何提高系統(tǒng)運(yùn)行效率

文章出處:【微信號(hào):eng2mot,微信公眾號(hào):汽車(chē)ECU開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于載波優(yōu)化的云臺(tái)馬達(dá)驅(qū)動(dòng)板控制策略

    云臺(tái)馬達(dá)驅(qū)動(dòng)板的控制性能直接決定云臺(tái)的定位精度、運(yùn)行平滑性與續(xù)航能力。針對(duì)傳統(tǒng)控制策略中載波參數(shù)固定、調(diào)制模式單一導(dǎo)致的 “低速抖動(dòng)、高速發(fā)熱、噪聲超標(biāo)” 等問(wèn)題,本文提出一種基于載波優(yōu)化的一體化
    的頭像 發(fā)表于 03-06 15:16 ?74次閱讀

    AURIX? TC3xx 電機(jī)控制電源板:設(shè)計(jì)解析與特性洞察

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

    英飛凌AURIX? TC3xx安全應(yīng)用套件快速上手

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

    CW32 MCU在高頻率運(yùn)行下的系統(tǒng)穩(wěn)定性的提升方案

    問(wèn)題,并提出一系列應(yīng)對(duì)措施,包括硬件設(shè)計(jì)改進(jìn)和軟件優(yōu)化策略,以確保系統(tǒng)在高頻工作環(huán)境中的可靠性和持續(xù)穩(wěn)定運(yùn)行。 具體內(nèi)容包括: 高頻運(yùn)行
    發(fā)表于 12-04 08:04

    通過(guò)優(yōu)化代碼來(lái)提高M(jìn)CU運(yùn)行效率

    調(diào)用開(kāi)銷(xiāo)。 使用 const 和 volatile 關(guān)鍵字,幫助編譯器進(jìn)行更好的優(yōu)化。 數(shù)據(jù)類(lèi)型選擇 使用與MCU字長(zhǎng)匹配的數(shù)據(jù)類(lèi)型。在32位MCU上,int 和 uint32_t 的處理效率通常
    發(fā)表于 11-12 08:21

    蜂鳥(niǎo)E203內(nèi)核優(yōu)化方法

    。 修改內(nèi)核參數(shù):對(duì)蜂鳥(niǎo)E203的內(nèi)核參數(shù)進(jìn)行相應(yīng)修改,可以優(yōu)化內(nèi)核運(yùn)行效率,提高系統(tǒng)性能,比如調(diào)整緩存大小、內(nèi)存分配策略等。 資源管理:進(jìn)
    發(fā)表于 10-21 07:55

    PCIM2025論文摘要 | 針對(duì)儲(chǔ)能系統(tǒng)應(yīng)用(ESS)的優(yōu)化驅(qū)動(dòng)器設(shè)計(jì)策略

    本論文摘要由PCIM官方授權(quán)發(fā)布1簡(jiǎn)介本文介紹了一種用于儲(chǔ)能系統(tǒng)(ESS)的自適應(yīng)驅(qū)動(dòng)器優(yōu)化策略,以應(yīng)對(duì)過(guò)載可靠性和運(yùn)行效率方面的挑戰(zhàn)。通過(guò)
    的頭像 發(fā)表于 08-15 17:34 ?959次閱讀
    PCIM2025論文摘要 | 針對(duì)儲(chǔ)能<b class='flag-5'>系統(tǒng)</b>應(yīng)用(ESS)的<b class='flag-5'>優(yōu)化</b>驅(qū)動(dòng)器設(shè)計(jì)<b class='flag-5'>策略</b>

    請(qǐng)問(wèn)如何僅使用軟件和 TC375 精簡(jiǎn)板來(lái)測(cè)量函數(shù)調(diào)用的堆棧使用情況?

    我想測(cè)量 AURIX TriCore? TC3xx 項(xiàng)目的函數(shù)調(diào)用的堆棧使用情況。 我不知道該怎么做。 我知道事實(shí)上作為硬件我只有一個(gè) TC375 lite 開(kāi)發(fā)板,沒(méi)有 BlueBox 或任何
    發(fā)表于 08-08 07:28

    TC3XX 的端口可以同時(shí)被 EvADC 和 DSADC 用于 ADC 轉(zhuǎn)換嗎?

    1、TC3XX 的端口可以同時(shí)被 EvADC 和 DSADC 用于 ADC 轉(zhuǎn)換嗎? 例如,TC36X系列的AN1引腳 2、同時(shí)重新分配同一個(gè)引腳,是否會(huì)影響EVAADC和DSADC的轉(zhuǎn)換結(jié)果的精度和速度?
    發(fā)表于 08-07 08:19

    兩片TC3XX芯片之間的時(shí)鐘同步可以實(shí)現(xiàn)嗎?

    實(shí)現(xiàn)兩片TC3XX芯片之間的時(shí)鐘同步,希望兩片芯片的PWM輸出能夠同步。類(lèi)似功能的芯片能實(shí)現(xiàn)上述操作嗎?期待你的答復(fù)。非常感謝?。?!
    發(fā)表于 08-04 07:51

    TC3XX /TC1.6.2OCDS如何通過(guò)軟件啟用核心調(diào)試控制器?

    如何通過(guò)軟件啟用核心調(diào)試控制器?也就是說(shuō)可以通過(guò)軟件讀取DBGSR.DE =1。參考TriCore? TM TC1.6.2 核心架構(gòu)手冊(cè)第 1 卷。
    發(fā)表于 07-30 06:27

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

    我們正在使用 TC397XX。我遇到的問(wèn)題是 EB Stack 中沒(méi)有 IRQ 驅(qū)動(dòng)程序。那么,我們?nèi)绾问褂?EB 堆棧處理 IRQ。 從哪個(gè) AUTOSAR 版本開(kāi)始,IRQ 驅(qū)動(dòng)程序被刪除了?
    發(fā)表于 07-15 06:20

    請(qǐng)問(wèn)tc3xx如何配置多個(gè)dedicatedRxBuffersNumber?

    tc3xx如何配置多個(gè)dedicatedRxBuffersNumber?
    發(fā)表于 04-21 07:53

    基于Infineon TC4D9+TLF4D985的Aurix StartKit

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

    電機(jī)大范圍調(diào)速的綜合電壓調(diào)制策略

    提高大范圍調(diào)速電機(jī)的運(yùn)行效率,為系統(tǒng)的高效運(yùn)行提供了有效途徑。 純分享帖,需要者可點(diǎn)擊附件獲取完整資料~~~ (免責(zé)聲明:本文系網(wǎng)絡(luò)轉(zhuǎn)載,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如
    發(fā)表于 04-01 14:51