Розны

Аптымізацыя кода ў мікракантролерах

Аўтар: Laura McKinney
Дата Стварэння: 4 Красавік 2021
Дата Абнаўлення: 16 Травень 2024
Anonim
Измерение 5A-30A переменного и постоянного тока с использованием ACS712 с библиотекой Robojax
Відэа: Измерение 5A-30A переменного и постоянного тока с использованием ACS712 с библиотекой Robojax

Задаволены

Аўтар завяршыў свой інжынерны праект за апошні год мікракантролерамі dsPic, атрымаўшы шырокае разуменне гэтых прылад.

Код C-мовы мікракантролера можа запатрабаваць аптымізацыі ў некаторых пашыраных праграмах. Гэтая аптымізацыя кода практыкуецца для скарачэння дзвюх важных рэчаў:

  1. Памер кода: Мікракантролеры могуць захоўваць абмежаваныя дадзеныя і інструкцыі з-за абмежаванага памеру іх аператыўнай памяці. Таму код трэба аптымізаваць, каб даступныя інструкцыі і памяць дадзеных маглі быць выкарыстаны найбольш эфектыўна.
  2. Час выканання кода: Мікракантролеры - гэта паслядоўныя прылады, якія выконваюць па адной інструкцыі адначасова. Кожная інструкцыя зборкі спажывае пэўную колькасць тактавых цыклаў, каб выканаць сябе. Таму код павінен быць аптымізаваны для таго, каб ён выконваў неабходную задачу з мінімальнай колькасцю тактавых цыклаў альбо інструкцый па зборцы. Чым менш цыклаў гадзінніка выкарыстоўвае код, тым хутчэй ён працуе. Гэта азначае, што прыкладанні могуць працаваць хутчэй, бо час апрацоўкі зведзены да мінімуму.

У гэтым артыкуле прадстаўлены парады і рэкамендацыі, якія могуць быць выкарыстаны для памяншэння памеру і часу выканання кода мікракантролера.


IDE распрацоўкі Microplap для распрацоўкі MplabX будзе выкарыстана для дэманстрацыі прыкладаў, дзе гэта дарэчы.

Як эксперыментальна вымераць час выканання кода

Каб атрымаць уяўленне пра тое, колькі часу на самай справе патрабуецца для выканання вашага кода ў рэжыме рэальнага часу, вам неабходна вымераць яго эксперыментальна. Лагічны аналізатар можна зручна выкарыстоўваць для вымярэння часу выканання кода, і зацікаўленыя могуць даведацца пра працэс для гэтага ў мяне па электроннай пошце. Акрамя гэтага:

  • Некаторыя кампілятары маюць магчымасць падлічваць цыклы, якія спажывае код.
  • Некаторыя адладчыкі, напрыклад ICD 3 з мікрачыпа, могуць непасрэдна вымераць час выканання праз секундамер.

1. Ведайце магутнасць апрацоўкі і аб'ём памяці вашага мікракантролера

Не заўсёды тактавая частата (МГц) дае сапраўдную карціну хуткасці апрацоўкі мікракантролера, больш рэалістычнай мерай з'яўляецца MIPS (мега інструкцый у секунду) альбо колькасць інструкцый, якія MCU можа выканаць за секунду.

MCU звычайна вагаюцца ад 60–70 MIPS у катэгорыі высокага класа да 20 MIPS 8-бітных AVR. Высокі мікракантролер MIPS, хутчэй за ўсё, будзе даражэйшы за прыладу нізкага ўзроўню, таму тут у вас ёсць кампраміс паміж коштам і хуткасцю апрацоўкі.


Мікракантролеры маюць асобную памяць для захоўвання дадзеных і праграмнага кода. Памер іх абодвух можна даведацца з табліцы дадзеных. Магчыма, вам спатрэбіцца MCU з вялікім аб'ёмам памяці, калі ваш код істотна вялікі.

2. Выбар зменных для аптымізацыі памеру кода

Мікракантролеры маюць абмежаваную памяць дадзеных, як правіла, ад 1 да 4 Кбайт. У гэтым выпадку разумна выбраць найбольш прыдатны тып зменнай у адпаведнасці з чаканым дыяпазонам даты, якая захоўваецца. У табліцы ніжэй прыведзены наступныя зменныя:

Кароткі змест зменных, якія выкарыстоўваюцца ў C-мове.

Зменны тыпПамер у байтахДыяпазон

bool

1

Толькі 0 ці 1

знач

1


-128 да 127

унутр

2

-32 768 да 32 767

непадпісаны міжнар

2

Ад 0 да 65 535

доўга

4

Ад -2 147 483 648 да 2147 483 647

паплавок

4

Дакладны да 6 знакаў пасля коскі

двайны

8

Дакладнасць да 15 знакаў пасля коскі

доўгі двайны

10

Дакладнасць да 19 знакаў пасля коскі

Прыклад:

  • Калі трэба дадаць дзве зменныя X і Y, а вынік захаваць у Z, але, як чакаецца, значэнне Z будзе большае, чым 65 535 пасля складання, тады Z можа быць аб'яўлена доўгім, а X і Y могуць быць аб'яўлены як непадпісаныя int, значэнні X і Y таксама не чакаюцца адмоўнымі. Гэта дазволіць зэканоміць 04 байта ў памяці дадзеных, якія ў адваротным выпадку былі б выкарыстаны, калі б усе зменныя былі аб'яўлены як доўгія.
  • Дзве зменныя X і Y, значэнні якіх, як чакаецца, будуць цэлымі лікамі, трэба падзяліць, але вынік дзялення можа даць дзесятковы знак, затым X і Y могуць быць аб'яўлены int і вынік можа быць аб'яўлены з плаваючай або падвойнай у залежнасці ад патрабуецца дакладнасць.

Выбар тыпу дадзеных можа мець вырашальнае значэнне пры аб'яўленні масіваў, якія змяшчаюць вялікую колькасць элементаў.

3. Выбар зменных для аптымізацыі падчас выканання кода

  • Устаноўлены факт, што разлікі з плаваючай кропкай займаюць больш часу, чым разлікі з фіксаванай кропкай. Не выкарыстоўвайце зменную з плаваючай коскай, дзе дзесятковае значэнне не патрабуецца. Працуйце з цэлымі лікамі без знака, дзе гэта магчыма.
  • Мясцовыя зменныя аддаюць перавагу глабальным зменным. Калі пераменная выкарыстоўваецца толькі ў функцыі, яна павінна быць аб'яўлена ў гэтай функцыі, таму што доступ да глабальных зменных адбываецца павольней, чым лакальныя.
  • 8-бітны MCU знойдзе да пераменнай памерам адзін байт хутчэйшы доступ, а 16-бітны MCU - 2-байтовую зменную, лягчэйшы доступ з-за даўжыні згенераванага адраса.

4. Аптымізацыя арыфметычных аперацый

Арыфметычныя аперацыі можна аптымізаваць наступнымі спосабамі.

  1. Выкарыстоўвайце пошукавыя табліцы загадзя вылічаных значэнняў замест ацэнкі сінуса альбо любой іншай трыганаметрычнай функцыі альбо любой іншай аперацыі, вынік якой можна загадзя даведацца ў кодзе.
  2. У выпадку, калі табліца пошуку сінусаў ужо захоўваецца ў памяці, косінус можа быць ацэнены шляхам прасоўвання паказальніка масіва, эквівалентнага 90 градусам.
  3. Сярод чатырох арыфметычных аперацый на дзяленне і множанне патрабуецца больш за ўсё часу апрацоўкі, на практыцы гэта можа быць у межах соцень мікрасекунд, пры значэнні з плаваючай кропкай.
  4. Выкарыстоўвайце інструкцыі па зрушэнні біта замест дзялення і множання. Інструкцыя 3 правай змены служыць для дзялення на 23 дзе ў якасці левай змены інструкцыя 1 будзе служыць множанню на 21.

5. Выкарыстоўвайце мікракантролер з магчымасцю DSP для інтэнсіўных разлікаў

Некаторыя мікракантролеры маюць убудаваны ў іх архітэктуру блок апрацоўкі DSP, акрамя звычайнага ALU. Гэты рухавік DSP прызначаны для выканання арыфметычных вылічэнняў вельмі хутка з найменшай колькасцю тактавых цыклаў (у большасці выпадкаў) у шмат разоў хутчэй, чым ALU.

Інструкцыі, якія працэсар DSP можа выконваць хутчэй, чым ALU:

  • Інструкцыі па змене і павароце біт.
  • Множанне, дзяленне і іншыя арыфметычныя дзеянні.
  • Ацэнка сінусаў і іншых трыганаметрычных функцый.
  • Усе аперацыі DSP, такія як FFT, DFT, звіліна і фільтрацыя FIR.

Выкарыстанне рухавіка DSP мікракантролера патрабуе, каб:

  • У праект уключаны асобныя бібліятэкі DSP.
  • Назвы функцый адрозніваюцца ад стандартнай матэматычнай бібліятэкі на C-мове. Дакументацыю гэтых бібліятэк і функцый можна атрымаць на сайце адпаведных вытворцаў.
  • У рухавіку DSP выкарыстоўваецца іншы тып зменнай "дробны". Даведайцеся, як выкарыстоўваць дробныя зменныя тыпу, перш чым перайсці да функцый бібліятэкі dsp.

Звярніце ўвагу, што стандартныя функцыі матэматычнай бібліятэкі не будуць выклікаць механізм DSP, таму што яны пераводзяцца ў інструкцыі па зборцы ALU.

6. Праца з перапыненнямі

Выкарыстоўвайце перапыненні для выканання пэўных функцый, такіх як:

  • Счытванне значэнняў ADC.
  • Адпраўка і атрыманне ад UART.
  • Абнаўленне рэгістраў працоўнага цыклу ШІМ.
  • Сувязь CAN альбо I2C.

Перапыненні абслугоўваюць гэтыя функцыі хутка ў параўнанні з іх выкананнем у асноўным корпусе з дапамогай выкліку функцыі альбо ўбудаванага кода.

Перапыненні таксама спрацоўваюць толькі пры неабходнасці, тады як, калі яны закадзіраваны ў асноўным корпусе, код будзе выконвацца на кожнай ітэрацыі цыкла while (1).

7. Выкарыстоўвайце лепшыя даступныя кампілятары

Кампілятары могуць аўтаматычна рэалізаваць некаторыя з аптымізацый, разгледжаных вышэй, пры перакладзе кода з мовы C на мову зборкі, калі яны правільна настроены. Звярніце ўвагу на варыянты аптымізацыі ў кампілятары і, па магчымасці, абнавіцеся да прафесійных версій кампілятараў, таму што яны больш магутныя аптымізатары кода.

8. Разумна выкарыстоўвайце ўмоўныя выказванні

  • Пры выкарыстанні шэрагу выказванняў if-else у першую чаргу захоўвайце найбольш верагодны стан. Такім чынам, MCU не трэба будзе сканаваць усе ўмовы пасля таго, як ён знойдзе сапраўдны стан.
  • Аператар пераключэння выпадкаў звычайна хутчэй, чым калі-небудзь яшчэ.
  • Выкарыстоўвайце ўкладзеныя выказванні if-else замест серыі выказванняў. Блок if-else, які мае мноства выказванняў, можа быць падзелены на больш дробныя падгаліны для аптымізацыі для найгоршага (апошняга) стану.

9. Выкарыстоўвайце ўбудаваныя функцыі

Функцыі, якія выкарыстоўваюцца толькі адзін раз у кодзе, могуць быць аб'яўлены як статычныя. Гэта прымусіць кампілятар аптымізаваць гэтую функцыю да ўбудаванай функцыі, і, такім чынам, код зборкі не будзе перакладзены для выкліку функцыі.

  • Функцыя можа быць аб'яўлена ўбудаванай, выкарыстоўваючы разам з ёй ключавое слова "static".

10. Выкарыстоўвайце паменшаныя завесы

Паменшаны цыкл будзе генераваць менш кода зборкі ў параўнанні з павялічаным цыклам.

Гэта таму, што ў цыкле павелічэння неабходна інструкцыя параўнання для параўнання індэкса цыкла з максімальным значэннем у кожным цыкле, каб праверыць, ці дасягае індэкс цыкла максімальнага значэння. Наадварот, у цыкле памяншэння гэта параўнанне больш не патрэбна, таму што зменшаны вынік індэкса цыкла ўсталюе нулявы сцяг у SREG, калі ён дасягне нуля.

Улічваючы, што цыкл павінен паўтарацца сто разоў, памяншэнне адной інструкцыі з цыкла дазволіць пазбегнуць яго выканання ў сто разоў, таму ўздзеянне, верагодна, будзе больш значным, калі цыкл павінен паўтарацца шмат разоў.

Упакоўка

Гэтыя парады могуць быць карыснымі, але іх сапраўднае прымяненне і эфектыўнасць залежыць ад майстэрства праграміста і каманды, якую ён мае над сваім кодам. Памятаеце, памер праграмы не заўсёды вызначае час выканання, некаторыя інструкцыі могуць спажываць больш тактавых цыклаў, чым іншыя, таму зноў навыкі праграмы павінны адыграць сваю ролю.

Гэты артыкул дакладна і дакладна адпавядае ведам аўтара. Змест прызначаны толькі для інфармацыйных ці забаўляльных мэт і не замяняе асабістых кансультацый альбо прафесійных парад у дзелавых, фінансавых, юрыдычных і тэхнічных пытаннях.

Артыкулы Для Вас

Выбар Рэдактара

Лепшыя гульнявыя кейсы Full Money на грошы 2019
Кампутары

Лепшыя гульнявыя кейсы Full Money на грошы 2019

Я пакінуў фінансавую працу 6 гадоў таму, каб папрацаваць начальнікам сваёй мары. Я ніколі не азіраўся. Я засяроджваюся на аглядах тэхналогій, гульняў і абсталявання.Не плануеце хаваць сваё дарагое абс...
Як адключыць push-апавяшчэнні на iPad і iPhone
Кампутары

Як адключыць push-апавяшчэнні на iPad і iPhone

Джонатан Уайлі - кансультант па лічбавым навучанні, які захапляецца дапамагаць іншым атрымаць лепшае з іх тэхналогій.Націскныя апавяшчэнні - гэта папярэджанні ад пэўных праграм, якія тычацца нейкай но...