chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

在i.MX RT飛行學(xué)習(xí)板中的軟件優(yōu)化辦法,讓C代碼在ARM Cortex-M7內(nèi)核上極速飛奔

UtFs_Zlgmcu7890 ? 來源:未知 ? 作者:李倩 ? 2018-11-07 09:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

牡丹雖好,仍需綠葉扶持;RT雖快,仍需優(yōu)化。本文將分享在i.MX RT飛行學(xué)習(xí)板中的軟件優(yōu)化辦法,讓C代碼在ARM Cortex-M7內(nèi)核上極速飛奔!01

概述

i.MX RT飛行學(xué)習(xí)板,是真的會(huì)飛的處理器學(xué)習(xí)板!它的核心是恩智浦公司的跨界處理器i.MX RT1052, 基于ARM Cortex-M7內(nèi)核,主頻達(dá)600 MHz!對(duì)于電機(jī)驅(qū)動(dòng),雖然速度驚人,但是這個(gè)學(xué)習(xí)板要同時(shí)運(yùn)行“4無刷電機(jī)FOC驅(qū)動(dòng) + 飛控算法”,所以依然不是輕易的事情。

牡丹雖好,仍需綠葉扶持,下面將分享多種優(yōu)化手段,讓C代碼在i.MX RT上極速飛奔,實(shí)現(xiàn)這個(gè)“單芯片無人機(jī)”。先上段熱身視頻

視頻1 熱身視頻

02

加快代碼速度的秘訣

1、選擇硬件浮點(diǎn)

重要而簡單的第一步是:在編譯器中選擇“硬件雙精度浮點(diǎn)”,圖1是在KEIL中的選擇配置。

圖1 雙精度浮點(diǎn)

選擇“硬件雙精度浮點(diǎn)”的作用是,當(dāng)C代碼需要雙精度、單精度浮點(diǎn)運(yùn)算,編譯器就選擇最優(yōu)的浮點(diǎn)指令,速度最快!如果選擇“硬件單精度浮點(diǎn)”,單精度浮點(diǎn)運(yùn)算就用單精度浮點(diǎn)指令,但雙精度浮點(diǎn)運(yùn)算只能結(jié)合多條單精度指令完成,速度較慢。如果不選擇任何硬件浮點(diǎn),編譯器僅能用定點(diǎn)指令完成浮點(diǎn)運(yùn)算,速度非常慢。

但要注意,不是任意處理器都支持“硬件浮點(diǎn)”,即便同樣是ARM Cortex-M7內(nèi)核,有些半導(dǎo)體廠家為了降低成本,會(huì)裁掉“雙精度浮點(diǎn)”單元,只留下“單精度浮點(diǎn)”。而i.MX RT支持完整的單、雙精度浮點(diǎn)單元。得益于這個(gè)優(yōu)勢,飛行學(xué)習(xí)板中的ZLG-Soar飛控軟件,全部核心代碼都使用雙精度浮點(diǎn)指令,不單止精度高、而且速度超快,在相同主頻下,比定點(diǎn)指令的Cortex-M3快20倍以上!

2、關(guān)鍵代碼RAM中運(yùn)行

將代碼放在ITCM相連的RAM中運(yùn)行,速度最快!

Cortex-M7的中ITCM(Instruction-Tightly Coupled Memories)是專門的指令總線。我們?cè)趇.MX RT1052中分配了256Kbytes的內(nèi)部RAM在ITCM上,而且和Flash相比,內(nèi)部RAM沒有明顯的讀取延時(shí),所以代碼在這段RAM中運(yùn)行,速度是最快的,沒有更快!

程序清單1是飛行學(xué)習(xí)板在KEIL中的分散加載的配置,全部只讀RO數(shù)據(jù)(即代碼和CONST變量等)放在0x00000400地址開始的ITCM RAM里面。KEIL編譯后,其實(shí)全部原始數(shù)據(jù)都是存在Flash中,但 KEIL自動(dòng)在main函數(shù)前插入一段Flash函數(shù),該函數(shù)將相關(guān)的代碼從Flash復(fù)制到RAM,最后將PC指針改到RAM。這樣代碼就從RAM開始運(yùn)行。

程序清單1 ITCM RAM分散加載

如果代碼很大,無法全部復(fù)制到RAM中運(yùn)行,那么可以修改分散加載,僅將必要的代碼放在RAM中運(yùn)行,其他代碼在Flash中運(yùn)行。

3、關(guān)鍵算法寫成宏定義

在ZLG-FOC電機(jī)矢量控制庫中,全部核心算法都寫成宏定義的形式,如程序清單2的Clarke變換。

程序清單2 宏定義算法

如果寫成C函數(shù),那么上層代碼調(diào)用時(shí),一般先進(jìn)行入棧操作、保護(hù)現(xiàn)場,接著跳轉(zhuǎn)到該函數(shù)運(yùn)行,然后調(diào)用返回指令回到上層代碼,最后進(jìn)行出棧操作、恢復(fù)現(xiàn)場。這個(gè)過程必然會(huì)延長爭分奪秒的算法執(zhí)行時(shí)間。

可能有的人會(huì)說:在函數(shù)前面聲明inline,函數(shù)不就直接嵌入到上層代碼中,省去這些啰嗦過程嗎?其實(shí)不一定,編譯器也是很無奈的,KEIL和IAR的編譯手冊(cè)都說得很明白:根據(jù)代碼調(diào)用與被調(diào)用的復(fù)雜程度,能嵌進(jìn)去的,編譯器就幫忙嵌進(jìn)去,不能嵌進(jìn)去的,只能按普通函數(shù)那樣處理!

但如果將算法寫成宏定義,那么編譯會(huì)100%保證代碼會(huì)被直接嵌入到上層代碼中!只是對(duì)于過長的代碼,宏定義編寫不方便,這時(shí)候可以將代碼分拆成多個(gè)宏定義組合使用,或者僅把最必要的部分寫成宏定義。

4、盡量用C,少用匯編

盡量用C,少用匯編?晚上加班眼花,寫反了吧?沒寫錯(cuò),“匯編比C快”是好多年前、奔騰電腦時(shí)代的事情!現(xiàn)在是人工智能、大數(shù)據(jù)的時(shí)代,KEIL和IAR 的C編譯器經(jīng)過幾十年的發(fā)展,都變得非常聰明了(GCC筆者使用不多,不敢莽加評(píng)論)。首先,人腦能想到的最優(yōu)指令,C編譯器很多時(shí)候也能想到,可能比人腦想得更優(yōu)!再者,用匯編寫代碼,即便絞盡腦汁,頂多就單個(gè)函數(shù)速度最優(yōu),僅此而已!而C編譯器還會(huì)“綜合統(tǒng)籌”,例如,前后重復(fù)的代碼,它會(huì)合拼在一起;廢話、沒用的代碼,它會(huì)刪除;函數(shù)反復(fù)跳轉(zhuǎn)時(shí)的出入棧過程,它會(huì)想辦法減少……再配合上面提到的“算法寫成宏定義”,C代碼的運(yùn)行速度將更快!

就如我們敬愛的周工教導(dǎo)說:豬腦不如人腦、人腦不如電腦,i.MX RT在極速飛奔下就是很好的體現(xiàn)。

5、巧妙浮點(diǎn)出入棧

圖2顯示了Cortex-M7的浮點(diǎn)寄存器,S0-S31是浮點(diǎn)的通用寄存器,其他是控制或狀態(tài)等寄存器。如果軟件使能了浮點(diǎn)單元,那么在中斷發(fā)生后,M7默認(rèn)會(huì)將S0-S15、FPSCR等17個(gè)浮點(diǎn)寄存器硬件入棧,中斷完成后硬件出棧。雖然說是“硬件”,其實(shí)硬件也要花時(shí)間一個(gè)一個(gè)寄存器弄的,只不過比軟件處理,省了調(diào)用指令的時(shí)間。

圖2 Cortex-M7浮點(diǎn)寄存器

這里提出一個(gè)問題:假如有10個(gè)中斷程序輪流產(chǎn)生,處理器就自動(dòng)對(duì)17個(gè)浮點(diǎn)寄存器出入棧操作,但如果僅只有一個(gè)中斷使用了浮點(diǎn)指令,其他9個(gè)都不使用,那么大部分浮點(diǎn)出入棧的操作都是浪費(fèi)時(shí)間的!

如何解決這個(gè)問題呢?

ARM提出一種LAZY模式(其實(shí)一點(diǎn)都不懶),在中斷發(fā)生后,硬件只給17個(gè)浮點(diǎn)寄存器預(yù)留堆??臻g,但不入棧,只有中斷函數(shù)調(diào)用了第一條浮點(diǎn)指令前(例如浮點(diǎn)加、減、乘、除),硬件才補(bǔ)充入棧;中斷完成后,如果真的發(fā)生過硬件浮點(diǎn)入棧,才會(huì)相應(yīng)地出棧。這樣大大提高了浮點(diǎn)出入棧的效率!這種LAZY模式夠聰明吧,真不知ARM怎樣起名的,可能懶的極端就是聰明吧。

6、代碼清晰、聰明

圖3中的兩條蛇在樹上互相糾纏,分不清尾巴是誰的。寫代碼也同樣道理,如果習(xí)慣性地想到一點(diǎn)寫一點(diǎn)、寫前不規(guī)劃、寫后懶修改,就像圖3左邊的代碼,一堆if/else,邏輯模糊、難懂、難改,運(yùn)行速度沒保證。而右邊的代碼是經(jīng)過分析推理的聰明辦法,用switch case替代一堆if/else,邏輯清晰、易懂、易改,運(yùn)行速度有保證!

圖3 清晰聰明的代碼

前面介紹了很多在i.MX RT上加快代碼速度的方法,但都是輔助的,最核心的還是:花點(diǎn)心思規(guī)劃代碼要怎樣寫,代碼要清晰、聰明。

03

總結(jié)

牡丹雖好,仍需綠葉扶持,RT雖快,但仍需優(yōu)化才能發(fā)揮到極致的速度,將不可能的事情變?yōu)楝F(xiàn)實(shí)!就如我們ZLG的i.MX RT飛行學(xué)習(xí)板,是業(yè)界唯一的“4無刷電機(jī)FOC +飛控算法”的無人機(jī)方案。

11月初期的廣州還是茵茵綠草,我們踏青放飛去。

視頻2 踏青放飛

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

    關(guān)注

    68

    文章

    19896

    瀏覽量

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

    關(guān)注

    1

    文章

    1662

    瀏覽量

    50232
  • C代碼
    +關(guān)注

    關(guān)注

    1

    文章

    90

    瀏覽量

    14787

原文標(biāo)題:i.MX RT飛行學(xué)習(xí)板——如何讓C代碼在M7上極速飛奔?

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    深入淺出Cortex-M7——i.MX RT1050

    深入淺出Cortex-M7——i.MX RT1050
    發(fā)表于 03-06 08:39

    初識(shí)Layerscape和I.MX系列處理器

    視頻會(huì)議、可視門鈴、圖像分析、機(jī)器視覺檢查、語音助手等。圖2 EdgeScale軟件框架說起輕量型的網(wǎng)關(guān),不得不提的還有是跨界處理器i.MX RT 10501060系列?;?b class='flag-5'>Cortex-M7
    發(fā)表于 12-10 18:14

    【大聯(lián)大品佳 NXP i.MX RT1050試用體驗(yàn)】芯林至尊,寶刀RT1050,初識(shí)i.MX RT系列跨界處理器 (之一)

    ,它們通常采用ARMCortex-M 系列內(nèi)核,相對(duì)來說該內(nèi)核對(duì)中斷響應(yīng)更快,所以具有良好的實(shí)時(shí)性,但其芯片架構(gòu)特別是集成片內(nèi)閃存帶來了生產(chǎn)技術(shù)限制和成本負(fù)擔(dān),從而限制了其性能。
    發(fā)表于 08-19 11:44

    i.MX RT處理器系列

    我對(duì)i.MX RT處理器系列很感興趣,因?yàn)樗菣C(jī)器學(xué)習(xí)研究項(xiàng)目中有吸引力的解決方案。機(jī)器學(xué)習(xí)需要大量的計(jì)算能力,而且由于i.MX
    發(fā)表于 07-22 07:53

    Cortex-M7 + M4內(nèi)核的MCU資料大合集

    在前不久,恩智浦推出了Cortex-M7 + M4內(nèi)核的MCU(i.MX RT1170),主頻高達(dá)1GHz,打破MCU低頻的傳統(tǒng)。今天,我們
    發(fā)表于 11-03 08:05

    Cortex-M7 + M4內(nèi)核的MCU性能及特點(diǎn)是什么

    恩智浦推出了Cortex-M7 + M4內(nèi)核的MCU(i.MX RT1170),主頻高達(dá)1GHz,打破MCU低頻的傳統(tǒng)。今天,我們來了解一下
    發(fā)表于 11-03 09:10

    ZLG攜手NXP舉行i.MX RT 跨界處理器全國巡回研討會(huì)

    2018年3月20號(hào)—4月3號(hào),ZLG將攜手NXP全國6大城市(廣州、深圳、上海、杭州、南京、北京)舉辦i.MX RT 跨界處理器全國巡回研討會(huì),屆時(shí)將為您呈現(xiàn)NXP最新推出的i.MX
    的頭像 發(fā)表于 03-09 15:24 ?6375次閱讀

    高達(dá)600MHz主頻的Cortex-M7 MCU

    一顆強(qiáng)力的大腦是系統(tǒng)的靈魂,i.MX RT系列高實(shí)時(shí)微處理器,集成Cortex-M7內(nèi)核,最高600MHz主頻。
    的頭像 發(fā)表于 03-17 10:53 ?2w次閱讀
    高達(dá)600MHz主頻的<b class='flag-5'>Cortex-M7</b> MCU

    基于i.MX RT1061處理器的OK1061-S開發(fā)介紹

    OK1061-S開發(fā)采用“底板+核心”結(jié)構(gòu)設(shè)計(jì),搭載NXP公司 i.MX RT1061跨界處理器,ARM
    的頭像 發(fā)表于 11-21 09:30 ?1.2w次閱讀
    基于<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1061處理器的OK1061-S開發(fā)<b class='flag-5'>板</b>介紹

    支持高級(jí)語音命令和人臉識(shí)別應(yīng)用的NXP i.MX RT106L和RT106F處理器

    NXP Semiconductors的i.MX RT106L和i.MX RT106F跨界處理器是兩款專門針對(duì)特定解決方案設(shè)計(jì)的EdgeReady器件,搭載
    的頭像 發(fā)表于 05-29 15:18 ?4847次閱讀

    恩智浦i.MX RT1170開創(chuàng)GHz MCU時(shí)代

    的運(yùn)算能力和多媒體功能與易用性和實(shí)時(shí)處理相結(jié)合。i.MX RT1170雙核MCU集成主頻高達(dá)1 GHz的Arm Cortex -M7
    的頭像 發(fā)表于 03-22 11:14 ?3834次閱讀

    恩智浦i.MX RT1170將該系列帶上了更高的層面

    的運(yùn)算能力和多媒體功能與易用性和實(shí)時(shí)處理相結(jié)合。i.MX RT1170雙核MCU集成主頻高達(dá)1 GHz的Arm Cortex -M7
    的頭像 發(fā)表于 05-18 11:15 ?4189次閱讀

    恩智浦推出核跨界MCU的第二款產(chǎn)品i.MX RT1160

    作為雙核i.MX RT的第二個(gè)產(chǎn)品系列,i.MX RT1160系列跨界MCU集成主頻600MHz的Arm
    的頭像 發(fā)表于 06-22 16:32 ?3693次閱讀

    NXP推出基于i.MX RT117H的智能人機(jī)界面解決方案

    i.MX RT117H屬于RT1170系列 (Arm Cortex-M7 1GHz,Cortex-M
    發(fā)表于 11-29 12:33 ?1291次閱讀

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

    MCU-Healer 是基于 NXP i.MX RT1050 做的 3D 打印機(jī)方案,該方案主控 MCU i.MX RT1050是一顆 Cortex
    的頭像 發(fā)表于 04-06 15:06 ?1685次閱讀
    基于 NXP <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1050 的 3D 打印機(jī)方案