在线观看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)不再提示

如何提升RT1050的代碼運(yùn)行速度,使其發(fā)揮最大性能

UtFs_Zlgmcu7890 ? 來(lái)源:lq ? 2018-12-05 14:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文以RT1050為例,講解如何提升RT1050的代碼運(yùn)行速度,使其發(fā)揮最大性能,并列出在提升性能過(guò)程中可能會(huì)遇到的問(wèn)題以及解決辦法。

1.是誰(shuí)影響了代碼運(yùn)行速度?

在一般的MCU開(kāi)發(fā)中,我們習(xí)慣性的將代碼直接下載到MCU的內(nèi)部Flash中,并直接在內(nèi)部Flash中運(yùn)行,在I-CODE、D-CODE總線以及自帶的Flash加速器加持下,這么做似乎也沒(méi)什么問(wèn)題。但作為一款高性能并擁有最高600M主頻的跨界MCU,RT1050并沒(méi)有內(nèi)置Flash。那么在實(shí)際開(kāi)發(fā)中,就必須外置一塊 NOR Flash用于代碼的存儲(chǔ)。

如果此時(shí)我們還像之前開(kāi)發(fā)一般MCU那樣,讓代碼在Flash運(yùn)行,就會(huì)受限于Flash的讀寫速度,以及MCU與Flash之間的通信速度。那感覺(jué),就像開(kāi)著V12引擎的布加迪,跑在限速40的公路上,完全發(fā)揮不出來(lái)600M主頻的性能,更別談讓代碼的運(yùn)行速度飛起來(lái)了。

2. 如何讓代碼運(yùn)行速度飛起來(lái)!

代碼必須存儲(chǔ)在Flash中實(shí)現(xiàn)掉電不丟失,而與此同時(shí),我們又要求發(fā)揮600M主頻的最大性能,讓代碼的運(yùn)行速度飛起來(lái),可能你還沒(méi)想好怎么做,那就跟著小編一起,由淺到深,用實(shí)際可行的方案,一步步提升代碼運(yùn)行速度,并解決在提升代碼速度時(shí)遇到的阻礙,最后讓代碼的運(yùn)行速度飛起來(lái)。

2.1運(yùn)行域和加載域的概念

既然在Flash中運(yùn)行代碼效率不高,那我們首先想到的辦法,就是不讓代碼在Flash中運(yùn)行,那就不得不提到運(yùn)行域和加載域的概念。

代碼在通過(guò)編譯器鏈接器的處理后生成了固件文件,此時(shí)有兩個(gè)相關(guān)概念需要留意,就是加載域和運(yùn)行域。

加載域的意思是代碼要下載到哪里。這里肯定要選擇下載到Flash中。運(yùn)行域的意思是代碼在哪里運(yùn)行。例如我們可以指定代碼在RAM中運(yùn)行,那么在__main中,就會(huì)將相關(guān)代碼都拷貝到RAM中,在程序運(yùn)行時(shí),就會(huì)去RAM空間取指、譯碼、執(zhí)行。加載域和運(yùn)行域的定義可以在分散加載文件中完成。

聽(tīng)起來(lái)是個(gè)不錯(cuò)的想法,但是在實(shí)施的過(guò)程中,就會(huì)遇到一個(gè)問(wèn)題,我們所說(shuō)的代碼,也就是固件的CODE部分,也包含了中斷復(fù)位函數(shù)。我們知道,程序在上電時(shí),硬件會(huì)去相對(duì)地址0x00處取棧指針,而后偏移一個(gè)字,取復(fù)位中斷函數(shù)地址,并在復(fù)位中斷函數(shù)中執(zhí)行系統(tǒng)初始化函數(shù)SystemInit和__mian函數(shù),并在__mian函數(shù)中實(shí)現(xiàn)不同運(yùn)行域的代碼拷貝。按照這種硬件機(jī)制,有一些代碼是要在代碼拷貝之前運(yùn)行的。

因此我們并不能將所有代碼的運(yùn)行域都拷貝到RAM中運(yùn)行。這也是為什么分散加載文件規(guī)定,加載域中的第一個(gè)運(yùn)行域,其起始地址必須和該加載域起始地址相同。

一種可行的辦法是將不能更改運(yùn)行域的代碼提出來(lái),放在加載域的第一個(gè)運(yùn)行域,用于上電啟動(dòng)過(guò)程,然后將其他代碼段的運(yùn)行域放在RAM中,這樣一來(lái),在上電啟動(dòng)過(guò)程完成,進(jìn)入到mian函數(shù)后,代碼都是在RAM中運(yùn)行的,其速度會(huì)有飛一樣的提升。分散加載文件中相關(guān)示例配置和注釋如圖1所示。

圖1 運(yùn)行域分配

2.2RAM空間的優(yōu)化

以為上述的配置完成之后就可以起飛了嗎?不,還差一點(diǎn)。如果再對(duì)RT1050的存儲(chǔ)結(jié)構(gòu)多點(diǎn)了解,就會(huì)發(fā)現(xiàn)其內(nèi)部的RAM空間被分成了三個(gè)部分。包括ITCM、DTCM和OCRAM。這三個(gè)部分共享512K的RAM空間。在默認(rèn)配置下,ITCM和DTCM各占128K、OCRAM占256K。

根據(jù)RT1050的內(nèi)部總線結(jié)構(gòu),將代碼段放在ITCM、數(shù)據(jù)段放在DTCM中,可以帶來(lái)更高的性能和更快的代碼速度。其分散加載的示例配置如圖2所示。

圖2 DTCM空間和ITCM空間分配

講道理,經(jīng)過(guò)這樣的處理之后,我們已經(jīng)將代碼和數(shù)據(jù)的運(yùn)行域放在了整個(gè)RT1050運(yùn)行最快的位置,其600M主頻的性能也能最大力度的發(fā)揮出來(lái)。但是這樣做是不是就大功告成了呢?可能還不是,在實(shí)際的項(xiàng)目開(kāi)發(fā)中,還會(huì)遇到一些其他的問(wèn)題。

2.3其他的一些問(wèn)題

2.3.1 代碼和數(shù)據(jù)容量的問(wèn)題

如果不考慮整個(gè)工程的代碼大小,之前所做的一切都是很OK的,但是往往會(huì)遇到一種情況,就是代碼量或者數(shù)據(jù)量太大,已經(jīng)超出了范圍。

如果只是超過(guò)了RAM默認(rèn)的配置范圍,那可以將RAM的空間重新分配,以32K為單位,可以按照實(shí)際需要調(diào)整ITCM和DTCM的空間大小,不過(guò)有兩點(diǎn)需要注意,一是OCRAM至少要保留32K的空間大小、二是一定要在__main之前調(diào)整好RAM的分區(qū),否則在__mian函數(shù)中拷貝函數(shù)拷貝代碼時(shí)就會(huì)因?yàn)榭臻g不足而產(chǎn)生硬件錯(cuò)誤。

一種可行的辦法是在復(fù)位中斷函數(shù)的起始位置通過(guò)匯編指令去調(diào)整RAM的分區(qū),示例代碼如圖3所示。主要是修改三個(gè)寄存器中內(nèi)容,詳細(xì)信息可查閱參考手冊(cè)中相關(guān)的部分。

圖3 通過(guò)匯編指令調(diào)整RAM分區(qū)

如果代碼或者數(shù)據(jù)的容量已經(jīng)超出了RAM區(qū)域能調(diào)整的范圍,那就不能將代碼和數(shù)據(jù)的運(yùn)行域都放在RAM中了。例如使用libpng解碼庫(kù)解碼png圖片,可能需要1M以上的堆空間。在這種情況下,可以使用一塊大容量的SDRAM作為輔助,雖然代碼運(yùn)行的速度沒(méi)有在RAM中高,但是解決了RAM空間本身不是很充足的問(wèn)題,且在SDRAM中運(yùn)行代碼肯定會(huì)比在Flash中運(yùn)行代碼要快上很多。

有了SDRAM的加持,就可以選擇性的將需要高速運(yùn)行的代碼或者關(guān)鍵數(shù)據(jù)放在RAM的空間。一些不需要高速運(yùn)行的代碼或者數(shù)據(jù)放在SDRAM的空間。如果需要使用的堆太大,也可以將堆的空間放在SDRAM中。

通過(guò)這種策略靈活的調(diào)整之后,在最佳性能和代碼量之間能找到一個(gè)平衡點(diǎn),以更好的應(yīng)用于一些大型的工程,例如帶了操作系統(tǒng)、lwip協(xié)議棧、emWin等。

2.3.2 中斷響應(yīng)的問(wèn)題

在前面的操作中,我們一直沒(méi)有留意中斷這個(gè)對(duì)嵌入式系統(tǒng)十分重要的部分。由前面的操作可知,我們將中斷向量表加載到了Flash中用于上電啟動(dòng),而后就一直沒(méi)有管它,只是專注于代碼的運(yùn)行域。但是如果中斷向量表還在Flash中,那么當(dāng)產(chǎn)生中斷的時(shí)候,硬件還是會(huì)到Flash中的中斷向量表位置去查找相應(yīng)的中斷服務(wù)函數(shù),這樣一去一回,無(wú)疑就拖慢了中斷的響應(yīng)速度,要知道,在零等待的情況下,RT1050的中斷響應(yīng)時(shí)間可是能達(dá)到20ns的。

可以將中斷向量表也拷貝到RAM中,然后重新對(duì)中斷向量表的地址進(jìn)行映射。一種可行的方式是修改啟動(dòng)文件。在啟動(dòng)文件中再命名一個(gè)中斷向量表,該中斷向量表中添加原中斷向量表中除復(fù)位中斷函數(shù)之外的其他部分,而原中斷向量表中只保留復(fù)位中斷函數(shù)和棧指針。將新做的中斷向量表的運(yùn)行域放在RAM的起始位置。這樣在程序上電的時(shí)候。__main會(huì)將該中斷向量表拷貝到RAM的起始地址,而后在main函數(shù)的開(kāi)頭,對(duì)中斷向量表進(jìn)行重映射。不過(guò)需要注意的是,這種操作有一個(gè)弊端,就是需要保證在復(fù)位到執(zhí)行中斷向量表重映射期間,不能產(chǎn)生除了復(fù)位中斷之外的其他中斷,否則會(huì)造成硬件異常。

3. 代碼運(yùn)行速度已經(jīng)起飛

經(jīng)過(guò)上面的處理之后,怎么能不感受一下實(shí)際的起飛效果,可做一個(gè)LED燈翻轉(zhuǎn)的小例程用于測(cè)試,在例程中用軟件延時(shí)的方式翻轉(zhuǎn)小燈。先在Flash中運(yùn)行,讓軟件延時(shí)達(dá)到200ms左右的延時(shí)效果。能正常顯示之后,不改變代碼內(nèi)容,只是將代碼運(yùn)行域放在RAM中,再次運(yùn)行代碼,就能看到,此時(shí)小燈翻轉(zhuǎn)的頻率,已經(jīng)達(dá)到了起飛的效果。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17917

    瀏覽量

    362712
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4893

    瀏覽量

    70445
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1659

    瀏覽量

    50053

原文標(biāo)題:如何讓RT1050的代碼運(yùn)行速度飛起來(lái)

文章出處:【微信號(hào):Zlgmcu7890,微信公眾號(hào):周立功單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    rt1050程序在外部flash中跑同時(shí)去操作外部flash保存數(shù)據(jù)

    rt1050 外部運(yùn)行在外部flash ,同時(shí)操作外部flash 保存數(shù)據(jù)
    發(fā)表于 05-15 16:52

    【大聯(lián)大品佳 NXP i.MX RT1050試用申請(qǐng)】基于 NXP i.MX RT1050工業(yè)機(jī)器人開(kāi)發(fā)

    項(xiàng)目名稱:基于 NXP i.MX RT1050工業(yè)機(jī)器人開(kāi)發(fā)試用計(jì)劃:1,熟悉板子硬件,RT1050驅(qū)動(dòng)板子硬件,做GPIO測(cè)試,串口測(cè)試,SPI測(cè)試,IIC測(cè)試,PWM測(cè)試,每種出一片報(bào)告。2
    發(fā)表于 08-10 18:23

    【大聯(lián)大品佳 NXP i.MX RT1050試用申請(qǐng)】i.MX RT1050 3D打印機(jī)控制器

    項(xiàng)目名稱:i.MX RT1050 3D打印機(jī)控制器試用計(jì)劃:申請(qǐng)理由本人在開(kāi)源硬件行業(yè)有五年多的學(xué)習(xí)和開(kāi)發(fā)經(jīng)驗(yàn),曾設(shè)計(jì)多款FDM,SLA,LCD 3D打印機(jī)控制板,參與公司3D打印機(jī)的開(kāi)發(fā),對(duì)打
    發(fā)表于 08-10 18:23

    【大聯(lián)大品佳 NXP i.MX RT1050試用申請(qǐng)】使用NXP i.MX RT1050開(kāi)發(fā)板設(shè)計(jì)一款低成本CAN數(shù)據(jù)采集儀

    。那種采集+數(shù)據(jù)顯示的采集儀成本很高,通常使用的是Linux QT的方案,除去一顆支持CAN通信的高性能SOC之外,還需要額外的DDR EMMC等,電路板設(shè)計(jì)也比較復(fù)雜,而目前NXP這款RT1050
    發(fā)表于 08-10 18:24

    RT1050的uclinux該如何去使用呢

    RT1050的uclinux有哪些優(yōu)勢(shì)?RT1050的uclinux該如何去使用呢?
    發(fā)表于 10-21 07:49

    i.MX RT1050平臺(tái)的相關(guān)資料推薦

    的首款跨界處理器。該處理器具備應(yīng)用處理器的高性能與高度集成的優(yōu)勢(shì),更具有微控制器的易用性和實(shí)時(shí)功能。NXP Semiconductors(恩智浦半導(dǎo)體)公司根據(jù)用戶成本需求,在 i.MX RT1050 處理器的價(jià)格上做出調(diào)整,性價(jià)比極高,使之很快成為開(kāi)發(fā)者關(guān)注的焦點(diǎn)。高
    發(fā)表于 11-29 07:19

    i.MX RT1050的功耗和測(cè)量資料分享

    i.MX RT1050的功耗和測(cè)量
    發(fā)表于 12-12 07:23

    如何使用J-link在沒(méi)有EVB的情況下調(diào)試RT1050

    最近,我想在沒(méi)有 EVB 的情況下使用 J-link 調(diào)試 RT1050。我將 RT1050 設(shè)備放入插座,J-link 探針直接連接到設(shè)備引腳。設(shè)備已上電。但是當(dāng)我使用J-link軟件
    發(fā)表于 03-14 09:57

    有人在RT1050RT1060上用過(guò)PN7160嗎?

    有人在RT1050RT1060上用過(guò)PN7160嗎?我正在嘗試使用此芯片使用 NFC。如果有人有圖書館可以幫助我使用這個(gè)芯片,那對(duì)我來(lái)說(shuō)會(huì)很棒,或者如果有任何東西可以幫助我。
    發(fā)表于 04-03 07:00

    請(qǐng)問(wèn)如何測(cè)量RT1050的USB性能

    我想測(cè)試 RT1050 的 USB 帶寬,1) 我需要設(shè)置示例來(lái)進(jìn)行 USB 測(cè)試,SDK 示例 evkbimxrt1050_dev_hid_mouse_freertos 是合適的 USB 性能測(cè)試
    發(fā)表于 04-04 08:57

    i.MX RT系列(例如 RT1050/1060)有多少個(gè)PWM通道?

    i.MX RT 系列(例如 RT1050/1060)有多少個(gè) PWM 通道? 我可以像在 KV58 MCU(兩個(gè) flexPWM 模塊)上做同樣的事情嗎?
    發(fā)表于 05-18 07:07

    RT1050仿真器有什么要求嗎?

    社區(qū)試用的原子RT1050開(kāi)發(fā)板,要仿真的話需要單獨(dú)買個(gè)仿真器嗎?Jlink V8是不是不能用啊
    發(fā)表于 11-08 08:02

    【044】SylixOS 正式支持 i.MX RT1050平臺(tái)

    的首款跨界處理器。該處理器具備應(yīng)用處理器的高性能與高度集成的優(yōu)勢(shì),更具有微控制器的易用性和實(shí)時(shí)功能。NXP Semiconductors(恩智浦半導(dǎo)體)公司根據(jù)用戶成本需求,在 i.MX RT1050 處理器的價(jià)格上做出調(diào)整,性價(jià)比極高,使之很快成為開(kāi)發(fā)者關(guān)注的焦點(diǎn)。高
    發(fā)表于 11-19 12:51 ?14次下載
    【044】SylixOS 正式支持 i.MX <b class='flag-5'>RT1050</b>平臺(tái)

    基于 NXP i.MX RT1050 的 3D 打印機(jī)方案

    MCU-Healer 是基于 NXP i.MX RT1050 做的 3D 打印機(jī)方案,該方案主控 MCU i.MX RT1050是一顆 Cortex-M7 內(nèi)核的高性能 MCU,主頻達(dá)到 600MHz,擁有 512KB RAM
    的頭像 發(fā)表于 04-06 15:06 ?1618次閱讀
    基于 NXP i.MX <b class='flag-5'>RT1050</b> 的 3D 打印機(jī)方案

    在i.MX RT1050上如何實(shí)現(xiàn)雙大容量存儲(chǔ)(MSC)設(shè)備

    在i.MX RT1050上如何實(shí)現(xiàn)雙大容量存儲(chǔ)(MSC)設(shè)備
    的頭像 發(fā)表于 10-30 17:08 ?904次閱讀
    在i.MX <b class='flag-5'>RT1050</b>上如何實(shí)現(xiàn)雙大容量存儲(chǔ)(MSC)設(shè)備
    主站蜘蛛池模板: 亚洲www视频 | 欧美xxxx性高清 | 夜夜狠 | 四虎网址在线 | 免费在线视频观看 | 免费鲁丝片一级观看 | 欧美特级黄 | 天堂网中文 | 国产1卡2卡三卡四卡网站 | 日日噜噜噜夜夜爽爽狠狠图片 | 特级全毛片 | 美女一级毛片免费观看 | 国产亚洲一区二区三区啪 | 亚洲一区二区影视 | 精品国产高清在线看国产 | 国产精品嫩草影院在线播放 | 色综合天天五月色 | 国产1卡2卡三卡四卡网站 | 亚洲图片综合区另类图片 | 国产美女免费 | 尤物黄色| 俺去啦五月 | 免费看的黄网站 | 日本不卡高清视频 | 日韩亚射吧 | 婷婷亚洲综合五月天在线 | 日韩欧美卡一卡二卡新区 | 免费视频你懂得 | 日韩一级片免费在线观看 | 久久精品人人爽人人爽 | 日本视频www | 久操福利| 四虎新地址 | 国内精品网站 | 五月激情六月丁香 | 国产深夜福利在线观看网站 | 全黄色一级片 | 日本免费在线视频 | 99草视频| 天天插天天色 | 日韩亚洲欧美日本精品va |