在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

汽車ECU開發(fā) ? 來源:汽車ECU開發(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ù)類型、對(duì)齊方式等等做了介紹,詳細(xì)分析了上述操作不同寫法對(duì)于CPU的通用寄存器使用效率上的影響,這給我留下了一點(diǎn)印象,但不多。 而最近我在用ADS驗(yàn)英飛凌LMU、DSPR、PSRP等等訪問效率時(shí),發(fā)現(xiàn)了這樣一行代碼:

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

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

可以看到,上述farbss這類屬于lsl里的section類型,而對(duì)于其memory 限定符則為__far,它表示遠(yuǎn)程數(shù)據(jù);再看其他的限定符,分別出現(xiàn)了__a0,__a1等等,很明顯講的是Tricore內(nèi)核的尋址模式,那么順著這個(gè)思路來捋捋線索,為代碼能力和系統(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è)倩剡^頭來看看Tasking文件里給的memory限定符,似乎有某種聯(lián)系,因此接下來我們了解Tricore的尋址模式。 Tricore是32位機(jī),很明顯可以訪問4GBytes(2^32)的memory空間,這4GB空間分成了16個(gè)Segment[0H-FH],用地址高四位來索引,每個(gè)Segment為256MBytes,其用法如下:

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

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

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

絕對(duì)尋址:主要用于I/O 外設(shè)寄存器和全局?jǐn)?shù)據(jù)的訪問,值得一提的是,這種方式只能訪問每個(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ù)等訪問,根據(jù)偏移的不同尋址方式可以分為short offset尋址(10 bits)和long offset尋址(16bits)。long offset尋址剛好就對(duì)應(yīng)__a0a1a8a9訪問。 故對(duì)于尋址方式與限定符關(guān)聯(lián)關(guān)系如下:

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

那這個(gè)__far到底指的是什么呢?根據(jù)手冊(cè)描述,指的是能夠訪問所有memory區(qū)域的數(shù)據(jù),難不成這些個(gè)限定符還會(huì)對(duì)匯編代碼有所影響嗎?這些限定符與鏈接文件有沒有關(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

編譯生成出來的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;

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

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

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

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í),那么通過A0寄存器尋址的所有變量就應(yīng)該在0xD0010000 - 0xD001FFFF。這個(gè)場(chǎng)景后面構(gòu)建了我們?cè)儆懻摚辽傥覀兇_定了利用寄存器+偏移的方式多用于局部變量訪問。

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

第二節(jié)我們發(fā)現(xiàn)了利用不同限定符將變量發(fā)到不同的section里,但是變量的地址始終沒有變化,那這到底有什么用呢? 編譯出來的C代碼最終會(huì)以匯編形式展示給機(jī)器,因此我們來看看不同限定符下對(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ì)角度來看,效率提升了44.44%,F(xiàn)lash消耗更少了。 同樣兩行C代碼,僅僅因?yàn)閷ぶ贩绞降牟煌瑓R編指令差異如此之大 ,從而影響系統(tǒng)運(yùn)行效率。

4.小結(jié)

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

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

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

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

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

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

    關(guān)注

    31

    文章

    5343

    瀏覽量

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

    關(guān)注

    0

    文章

    149

    瀏覽量

    20052
  • TriCore
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    11751

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    TC3XX系列IOM模塊ECMSELR寄存器中的CTS和CES有什么區(qū)別?

    我想利用 IOM 模塊來監(jiān)控 PWM 輸出,但我有一些問題。 TC3XX 系列 IOM 模塊 ECMSELR 寄存器中的 CTS 和 CES 有什么區(qū)別? 如果將 CES 的相應(yīng)通道設(shè)置為 1,是否會(huì)在發(fā)生事件時(shí)向 SMU 模塊發(fā)出警報(bào)? 最好的問候
    發(fā)表于 05-29 07:39

    TSIM是否支持TC3xx系列在沒有硬件的情況下調(diào)試應(yīng)用程序?

    你好, TSIM是否支持TC3xx系列在沒有硬件的情況下調(diào)試應(yīng)用程序? AURIX TC3xx - Free Entry ToolChain 是否有助于實(shí)現(xiàn)上述目的?
    發(fā)表于 05-17 07:02

    TC3xx的HSM中有沒有單調(diào)計(jì)數(shù)器?

    你好, 我看到 OPTIGA 有單調(diào)計(jì)數(shù)器,但我在 TC3xx 的 HSM 中確實(shí)找不到單調(diào)計(jì)數(shù)器。 能否確認(rèn)TC3xx的HSM中沒有單調(diào)計(jì)數(shù)器?
    發(fā)表于 03-05 07:56

    深入解析TC3xx芯片中的SMU模塊應(yīng)用

    TC3xx芯片是德國(guó)英飛凌半導(dǎo)體公司推出的汽車級(jí)處理器芯片系列,其中的SMU(System Management Unit)模塊是其重要組成部分之一。SMU模塊在TC3xx芯片中具有重要的系統(tǒng)
    的頭像 發(fā)表于 03-01 18:08 ?1758次閱讀

    GCC和TASKING有什么區(qū)別?應(yīng)該為AURIX? TC3xx選擇什么?

    GCC 和 TASKING 有什么區(qū)別? 我應(yīng)該為 AURIX? TC3xx 選擇什么? 這將如何影響代碼的運(yùn)行
    發(fā)表于 03-01 10:09

    請(qǐng)問TC3XX WDT 的check access應(yīng)該如何使用?

    hi,各位老師:請(qǐng)問TC3XX WDT 的check access應(yīng)該如何使用?以及Time Check Password如何理解及使用?讀手冊(cè)時(shí),一直沒有理解到Time Check
    發(fā)表于 02-02 08:17

    TC3xx系列是否支持RTC功能?

    請(qǐng)教各位,TC3xx系列芯片是否支持RTC功能,目前要記錄snapshot的時(shí)間點(diǎn)(年月日時(shí)分秒)。
    發(fā)表于 02-02 07:53

    TC3xx系列怎么禁用trap?

    目前在TC3xx調(diào)試flash讀寫功能,單獨(dú)運(yùn)行flash相關(guān)功能沒有問題,但將flash相關(guān)功能集成到工程中。操作pflash就會(huì)進(jìn)入trap中,查看了一些帖子說是要禁掉trap?請(qǐng)問怎么禁用trap?目前沒找到相關(guān)函數(shù)
    發(fā)表于 01-31 06:21

    SWAP是否適用于兩個(gè)用于TC3xx系列控制器的獨(dú)立軟件?

    目前正在使用 Swap/Partitions 概念實(shí)現(xiàn) SOTA(TC3xx 系列)。 檢查為應(yīng)用程序和引導(dǎo)加載程序?qū)嵤?SOTA 的可行性。 1。對(duì)于兩個(gè)獨(dú)立的軟件,SOTA是否可行? 2。如果是
    發(fā)表于 01-30 07:56

    TC3XX寄存器讀寫時(shí)間過長(zhǎng)怎么解決?

    我目前在做TC3XX底層代碼優(yōu)化,經(jīng)過之前多次測(cè)試目前可以確定該系列芯片對(duì)單個(gè)寄存器地址的讀寫耗時(shí)超過100us。請(qǐng)問對(duì)于寄存器讀寫耗時(shí)你們官方有沒有確切的文件說明?還有就是既然寄存器讀寫時(shí)間那么長(zhǎng)100M的外設(shè)總線時(shí)鐘是否有意義?
    發(fā)表于 01-25 06:56

    Pflash恢復(fù)保護(hù)命令最終會(huì)在Aurix TC3xx控制器上重置目標(biāo)是為什么?

    我正在連接 T32 調(diào)試器的 Aurix TC3xx 控制器評(píng)估板上測(cè)試 Pflash 讀/寫保護(hù)機(jī)制,我配置了 UCB_pFlash 和 UCB 調(diào)試,我成功解鎖了 Pflash 保護(hù),然后嘗試再次鎖定保護(hù),最終進(jìn)入目標(biāo)重置。 我不知道為什么會(huì)這樣。
    發(fā)表于 01-24 06:42

    TC3XX系列中,safety manual中寫著DTSCLIM和PMS-DTSLIM之間的差距大于9攝氏度,為什么?

    TC3XX系列中,safety manual中寫著DTSCLIM和PMS-DTSLIM之間的差距大于9攝氏度,認(rèn)為此時(shí)是異常的,要觸發(fā)alarm。請(qǐng)問為什么要設(shè)計(jì)成這樣,這個(gè)閾值為啥是9攝氏度
    發(fā)表于 01-22 06:36

    TC3xx SCR功耗應(yīng)該怎么評(píng)估?

    TC3xx SCR處于70kHz active狀態(tài),以及CAN WAKE UP也處于active,Tricore都掉電了,這個(gè)時(shí)候功耗是多少呢?SCR中不同的組件激活狀態(tài)下,功耗應(yīng)該怎么評(píng)估,有沒有
    發(fā)表于 01-19 08:28

    tc3xx休眠時(shí)mcu pin可以是高阻態(tài)嗎?如何設(shè)置?

    tc3xx,休眠時(shí)mcu pin可以是高阻態(tài)嗎?如何設(shè)置?
    發(fā)表于 01-19 08:26

    AURIX? TC3XX如何暫時(shí)僅啟用/禁用CAN中斷?

    你我使用的是 AURIX? TC3XX。 在 CAN ISR 處理期間,如何暫時(shí)僅啟用/禁用 CAN 中斷?
    發(fā)表于 01-18 06:47
    主站蜘蛛池模板: 欧美女同在线| 免费看啪啪网站| 乱人伦xxxx国语对白| 精品乱人伦一区二区三区| 操一操干一干| 夜夜嘿视频免费看| 在线国产你懂的| 午夜影院一级片| 一区二区三区影院| 色婷婷综合网| 免费大秀视频在线播放| 成 黄 色 激 情视频网站| 天天干在线影院| 亚洲成a人片77777kkk| 欧美一区二区三区不卡免费观看| 亚洲黄色激情网| 欧美a色| 91tm视频| 爱爱天堂| 天堂网最新版中文| 精品国产乱码久久久久久浪潮 | www色综合| 四虎影院永久在线| 黄视频网站在线观看| 狠狠干综合| 性色爽爱性色爽爱网站| 久久永久免费| 手机看片免费福利| 一区二区三区高清视频在线观看| 色视频大全| 永久免费在线视频| 啪啪日韩| 五月香婷婷| 国产午夜人做人视频羞羞| 六月丁香综合网| 下农村女人一级毛片| 伊人天伊人天天网综合视频| 女主播扒开内衣让粉丝看个够| 久操伊人网| 久久免费久久| 五月婷婷丁香综合网|