Остало

Оптимизација кода у микроконтролерима

Аутор: Laura McKinney
Датум Стварања: 4 Април 2021
Ажурирати Датум: 16 Може 2024
Anonim
AVR 28# Режимы оптимизации кода компилятором
Видео: AVR 28# Режимы оптимизации кода компилятором

Садржај

Аутор је завршио своју последњу годину инжењерског пројекта са дсПиц микроконтролерима, стекавши опсежан увид у ове уређаје.

Код микроконтролера на Ц језику може захтевати оптимизацију у одређеним напредним апликацијама. Ова оптимизација кода се увежбава да би се смањиле две кључне ствари:

  1. Величина кода: Микроконтролери могу да чувају ограничене податке и упутства због ограничене величине њихове РАМ меморије. Због тога је код потребно оптимизирати, тако да се расположива упутства и меморија података могу искористити на најефикаснији начин.
  2. Времена извршавања кода: Микроконтролери су секвенцијални уређаји који извршавају по једну инструкцију одједном. Свака инструкција о монтажи троши одређени број тактова да би се сама извршила. Због тога код мора бити оптимизован како би се осигурало да извршава тражени задатак у најмање броју циклуса такта или упутстава за монтажу. Што мање циклуса такта код користи, то је бржи. То значи да апликације могу да раде брже, јер је време обраде минимизирано.

Овај чланак представља савете и трикове који се могу користити за смањење величине и времена извршавања кода микроконтролера.


Мицроцхип-ов МплабКс развојни ИДЕ ће се користити за демонстрацију примера тамо где је то потребно.

Како експериментално мерити време извршавања кода

Да бисте добили идеју колико времена вашем коду заправо треба за извршавање у реалном времену, треба да га мерите експериментално. Логички анализатор се може погодно користити за мерење времена извршавања кода, а заинтересовани могу путем е-поште да се распитају за поступак за то. Поред тога:

  • Неки компајлери имају могућност бројања циклуса такта које ће код потрошити.
  • Неки програм за отклањање грешака, на пример ИЦД 3 из микрочипа, могу директно мерити време извршавања помоћу штоперице.

1. Знајте процесорску снагу и величину меморије вашег микроконтролера

Тактна фреквенција (Мхз) није увек тачна слика брзине обраде микроконтролера, реалнија мера је МИПС (мега инструкције у секунди) или број инструкција које МЦУ може извршити у секунди.

МЦУ се обично крећу од 60–70 МИПС у врхунској категорији до 20 МИПС 8-битних АВР-а. Високи МИПС микроконтролер ће вероватно бити скупљи од уређаја нижег нивоа, тако да овде имате компромис између трошкова и брзине обраде.


Микроконтролери имају одвојену меморију за чување података и програмског кода. Величина оба се може наћи у техничком листу. Можда ће вам требати МЦУ с већом величином меморије ако је ваш код знатно велик.

2. Избор променљивих за оптимизацију у величини кода

Микроконтролери имају ограничену меморију података, обично у распону од 1 до 4 Кбитес. У овом случају је паметно одабрати најприкладнији тип променљиве према очекиваном опсегу датума који се чува. Доња табела сумира ове променљиве:

Резиме променљивих коришћених у језику Ц

Тип променљивеВеличина у бајтовимаДомет

боол

1

Само 0 или 1

цхар

1


-128 до 127

инт

2

-32.768 до 32.767

непотписан инт

2

0 до 65.535

дуго

4

-2,147,483,648 до 2,147,483,647

пловак

4

Прецизно до 6 децималних места

двоструко

8

Прецизно до 15 децималних места

дугачак дупли

10

Прецизно до 19 децималних места

Пример:

  • Ако се додају две променљиве Кс и И, а резултат се ускладишти у З, али се очекује да ће вредност З бити већа од 65.535 након сабирања, тада се З може декларисати као дугачак, а Кс и И као непотписани инт, такође се не очекује да вредности Кс и И постану негативне. Ово ће уштедети 04 бајта у меморији података који би иначе били потрошени да су све променљиве декларисане као дугачке.
  • Две променљиве Кс и И, чије се вредности очекују у целим бројевима, треба поделити, али резултат дељења може дати децималу, затим Кс и И могу бити проглашени инт, а резултат може бити проглашен флоатом или дуплим, у зависности од потребна прецизност.

Избор типа података може бити пресудан када се декларишу низови који садрже велики број елемената.

3. Избор променљивих за оптимизацију у времену извршавања кода

  • Утврђена је чињеница да прорачуни са помичном тачком трају дуже од прорачуна са фиксном тачком. Не користите променљиву са помичном зарезом тамо где децимална вредност није потребна. Радите са непотписаним целим бројевима где год је то могуће.
  • Локалне променљиве су пожељније од глобалних променљивих. Ако се променљива користи само у функцији, тада се она мора декларисати у тој функцији, јер је приступ глобалним променљивим спорији од локалних променљивих.
  • Осмобитни МЦУ ће брже пронаћи променљиву величине једног бајта, а 16-битни МЦУ наћи ће променљиву од 2 бајта којој је лакше приступити због дужине генерисане адресе.

4. Оптимизација аритметичких операција

Аритметичке операције могу се оптимизовати на следеће начине.

  1. Користите табеле за претрагу унапред израчунатих вредности уместо да процењујете синус или било коју другу тригонометријску функцију или било коју другу операцију чији резултат може бити унапред познат у коду.
  2. У случају да је табела претраживања синуса већ ускладиштена у меморији, косинус се може проценити помицањем показивача низа еквивалентног 90 степени.
  3. Међу четири аритметичке операције, дељењу и множењу је потребно највише времена обраде, у пракси то може бити у опсегу од стотина микро-секунди у случају вредности са помичном зарезом.
  4. Користите упутства за померање битова уместо дељења и множења. Инструкција десне смене 3 служи за поделу са 23 где ће као лева смена инструкција 1 служити за множење са 21.

5. Користите микроконтролер способан за ДСП за интензивне прорачуне

Неки микроконтролери имају ДСП процесну јединицу која је другачија од уобичајене АЛУ уграђене у њихову архитектуру. Овај ДСП механизам је прилагођен да изводи аритметичке прорачуне врло брзо у најмањем броју тактова (један у већини случајева) много пута брже од АЛУ.

Упуте које ДСП процесор може извршити брже од АЛУ су:

  • Упутства за померање и окретање битова.
  • Множења, дељења и друге рачунске операције.
  • Процена синуса и других тригонометријских функција.
  • Све ДСП операције као што су ФФТ, ДФТ, конволуција и ФИР филтрирање.

Коришћење ДСП мотора микроконтролера захтева да:

  • У пројекат су уграђене засебне ДСП библиотеке.
  • Имена функција разликују се од стандардне математичке библиотеке Ц језика. Документација ових библиотека и функција може се добити на одговарајућем веб месту произвођача.
  • ДСП мотор користи другачији тип променљиве „фракциони“. Научите како да користите променљиве фракционог типа пре него што наставите са функцијама библиотеке дсп.

Имајте на уму да стандардне функције математичке библиотеке неће позивати ДСП механизам јер се преводе у упутства за састављање АЛУ.

6. Рад са прекидима

Користите прекиде за обављање одређених функција као што су:

  • Читање АДЦ вредности.
  • Слање и примање од УАРТ-а.
  • Ажурирање регистара радног циклуса ПВМ.
  • ЦАН или И2Ц комуникација.

Прекиди ће сервисирати ове функције брзо у поређењу са њиховим обављањем у главном делу путем позива функције или уграђеног кода.

Прекиди ће се такође активирати само када је то потребно, док ако се кодира у главном делу, код ће се извршити у свакој итерацији вхиле (1) петље.

7. Користите најбоље доступне компајлере

Преводитељи могу аутоматски применити неке од горе поменутих оптимизација док преводе код са Ц-језика на језик асемблера ако је правилно конфигурисан. Потражите опције за оптимизацију у вашем компајлеру и ако је могуће надоградите их на професионалне верзије компајлера, јер су они моћнији оптимизатори кода.

8. Интелигентно користите условне изјаве

  • Када користите серију иф-елсе наредби, прво задржите највероватније стање. На овај начин МЦУ неће морати да скенира све услове након што пронађе право стање.
  • Изјава о случају пребацивања обично је бржа од оне ако је другачије.
  • Уместо низа изјава користите угнеждене иф-елсе изразе. Блок иф-елсе који има много израза може се поделити на мање подгране ради оптимизације у најгорем случају (последњем) стању.

9. Користите уграђене функције

Функције које се користе само једном у коду могу се декларирати као статичне. То ће натјерати компајлер да оптимизира ту функцију на уграђену функцију и стога ниједан код склопа неће бити преведен за позив функције.

  • Функција се може прогласити инлине употребом кључне речи 'статиц' са њом.

10. Користите смањене петље

Декрементирана петља ће генерисати мање кода склопа у односу на повећану петљу.

То је зато што је у петљи прираста потребно упутство за упоређивање да би се индекс петље упоредио са максималном вредношћу у свакој петљи како би се проверило да ли индекс петље достиже максималну вредност. Супротно томе, у петљи смањења ово упоређивање више није потребно јер ће смањени резултат индекса петље поставити нулту заставицу у СРЕГ ако достигне нулу.

С обзиром на то да петља мора да се понавља стотину пута, смањивањем једне инструкције из петље избећи ће се њено извршење сто пута, па ће утицај вероватно бити значајнији када петља мора да се понавља неколико пута.

Окончање

Ови савети могу бити корисни, али њихова истинска примена и ефикасност зависе од вештине програмера и команде коју има на свом коду. Запамтите, величина програма не одређује увек време извршавања, нека упутства могу потрошити више циклуса такта него друга, па још једном вештине програма морају играти своју улогу.

Овај чланак је тачан и тачан по сазнањима аутора. Садржај је само у информативне или забавне сврхе и не може заменити лични савет или професионални савет у пословним, финансијским, правним или техничким питањима.

Препоручује Се Вама

Занимљив

Најбољи буџетски микрофони за ИоуТубе 2021
Компјутери

Најбољи буџетски микрофони за ИоуТубе 2021

Публика може прихватити чињеницу да је слика зрнаста, али када је звук искључен, они се прекидају. Из овог разлога сам потпуно укинуо или прерадио многе видео записе. Да се ​​то не би догодило, предла...
Роццат Јуке Ревиев
Компјутери

Роццат Јуке Ревиев

Марцус Хаген је 24-годишњи студент новинарства са Универзитета Цолумбиа.Очигледно преко 90% информација око себе упијамо очима. Ако сада узмемо у обзир да и рукама користимо да бисмо осетили предмете,...