Түрлүү

Микроконтроллерлердеги кодду оптималдаштыруу

Автор: Laura McKinney
Жаратылган Күнү: 4 Апрель 2021
Жаңыртуу Күнү: 16 Май 2024
Anonim
Микроконтроллерлердеги кодду оптималдаштыруу - Түрлүү
Микроконтроллерлердеги кодду оптималдаштыруу - Түрлүү

Мазмун

Автор акыркы курстагы инженердик долбоорун dsPic микро контроллерлору менен аяктап, ушул шаймандарда кеңири түшүнүк алды.

Микроконтроллердин С тилиндеги коду айрым өркүндөтүлгөн колдонмолордо оптималдаштырууну талап кылышы мүмкүн. Бул оптимизация эки маанилүү нерсени азайтуу үчүн колдонулат:

  1. Коддун көлөмү: Микроконтроллерлер оперативдик эс тутумунун көлөмү чектелүү болгондуктан, чектелген маалыматтарды жана көрсөтмөлөрдү сактай алышат. Андыктан кодду оптималдаштыруу керек, андыктан жеткиликтүү көрсөтмө жана маалымат эс тутуму натыйжалуу пайдаланылышы мүмкүн.
  2. Кодду аткаруу убактысы: Микроконтроллерлер - бирден буйрукту аткарган ырааттуу түзүлүштөр. Ар бир монтаждоо көрсөтмөсү өзүн аткаруу үчүн белгилүү бир саат циклдарын сарптайт. Демек, кодду саат циклдарынын же монтаждоо көрсөтмөлөрүнүн эң аз санында талап кылынган тапшырманы аткара тургандыгын камсыз кылуу үчүн оптималдаштыруу керек. Код колдонулган саат циклдары канчалык аз болсо, ал ошончолук тез иштейт. Бул колдонмолор тезирээк иштей алат дегенди билдирет, анткени иштетүү убактысы азайган.

Бул макалада микро-контроллер кодунун көлөмүн жана аткаруу убактысын кыскартуу үчүн колдонула турган кеңештер жана ыкмалар келтирилген.


Микрочиптин MplabX иштеп чыгуу IDE-си, ылайыктуу жерлерде мисалдарды көрсөтүү үчүн колдонулат.

Кодду аткаруу убактысын эксперименталдык түрдө кантип өлчөөгө болот

Кодуңуз реалдуу убакытта канча убакытты аткарышы жөнүндө түшүнүк алуу үчүн, аны эксперименталдык түрдө өлчөө керек. Логикалык анализаторду коддун аткарылыш убактысын өлчөө үчүн ыңгайлуу колдонсо болот жана кызыкдар адамдар бул процессти электрондук почта аркылуу сурап алса болот. Мунун жанында:

  • Айрым компиляторлор кодду колдонуучу саат циклдарын эсептөө мүмкүнчүлүгүнө ээ.
  • Кээ бир мүчүлүштүктөрдү оңдоочулар, мисалы ICD 3 микрочиптен, секундомер аркылуу аткаруу убактысын түздөн-түз өлчөй алышат.

1. Микроконтроллериңиздин иштетүү кубатын жана эс тутумунун көлөмүн билүү

Микро контроллердин иштөө ылдамдыгынын чыныгы сүрөтүн берген саат жыштыгы (МГц) ар дайым эле боло бербейт, ал эми MIPS (секундасына мега нускамалар) же MCU көрсөтмөлөрүнүн саны бир секундада аткарылышы мүмкүн.

MCU, адатта, жогорку категориядагы 60-70 MIPSден 20 MIPS 8-бит AVRге чейин. Жогорку MIPS микро контроллеру арзаныраак шайманга караганда кымбатыраак болушу мүмкүн, андыктан бул жерде өздүк нарк менен иштетүү ылдамдыгынын ортосунда айырма бар.


Микро контроллерлордо маалыматтарды жана программанын коддорун сактоо үчүн өзүнчө эстутум бар. Экөөнүн тең көлөмүн маалымат баракчасынан табууга болот. Эгер сиздин кодуңуз чоң болсо, эс тутумунун көлөмү чоңураак MCU керек болушу мүмкүн.

2. Коддун көлөмүн оптималдаштыруу үчүн өзгөрмөлөрдү тандоо

Микроконтроллерлердин эс тутуму чектелүү, адатта 1-4 Кбайтка чейин. Бул учурда, сакталып турган күндүн болжолдуу диапазонуна ылайык, эң ылайыктуу өзгөрмө түрүн тандоо акылдуулукка жатат. Төмөндөгү таблицада бул өзгөрүлмөлүүлөр кыскача келтирилген:

C тилинде колдонулган өзгөрүлмөлөрдүн кыскача баяндамасы.

Variable TypeӨлчөмү байт мененRange

bool

1

0 же 1 гана

char

1


-128ден 127ге чейин

int

2

-32,768ден 32,767 га чейин

unsigned int

2

0 ден 65,535ке чейин

узак

4

-2,147,483,648 ден 2,147,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. Sineди же башка тригонометриялык функцияны же жыйынтыгы коддо алдын-ала белгилүү боло турган башка операцияны баалоонун ордуна, алдын-ала эсептелген маанилердин издөө таблицаларын колдонуңуз.
  2. Эгерде синус издөө таблицасы эс тутумда мурунтан эле сакталса, косинус массив көрсөткүчүн 90 градуска барабар кылып баалоо мүмкүн.
  3. Төрт арифметикалык операциянын ичинен бөлүштүрүү жана көбөйтүү эң көп иштетилген убакытты талап кылат, иш жүзүндө жүздөгөн микро-секунда аралыктагы өзгөрмө чекиттин маанисинде болот.
  4. Бөлүүнүн жана көбөйтүүнүн ордуна битти жылдыруу көрсөтмөсүн колдонуңуз. Оң сменалык көрсөтмө 3 2ге бөлүүгө кызмат кылат3 мында сол нөөмөттүн көрсөтмөсү 1 2ге көбөйтүүгө кызмат кылат1.

5. Интенсивдүү эсептөө үчүн DSP жөндөмдүү микроконтроллерди колдонуңуз

Кээ бир микро контроллерлордо DSP иштетүү блогу бар, андан кийин алардын архитектурасында орнотулган кадимки ALU. Бул DSP кыймылдаткычы арифметикалык эсептөөлөрдү эң аз саат циклдарында (көпчүлүк учурда бирөө) ALUдан бир нече эсе тез аткарууга багытталган.

DSP процессору ALUдан тезирээк аткарыла турган көрсөтмөлөр:

  • Нускаманы жылдыруу жана айландыруу.
  • Көбөйтүү, Бөлүмдөр жана башка арифметикалык амалдар.
  • Sines жана башка тригонометриялык функцияларды баалоо.
  • FFT, DFT, конволюция жана FIR чыпкалоо сыяктуу бардык DSP операциялары.

Микроконтроллердин DSP кыймылдаткычын колдонуу төмөнкүлөрдү талап кылат:

  • Долбоорго өзүнчө DSP китепканалары киргизилген.
  • Функциялардын аталыштары С тилиндеги стандарттуу математикалык китепканадан айырмаланат. Бул китепканалардын жана функциялардын документтерин тиешелүү өндүрүүчүлөрдүн веб-сайтынан алууга болот.
  • DSP кыймылдаткычы "фракциялык" башка өзгөрмө түрүн колдонот. Dsp китепканасынын функцияларына өтүүдөн мурун, фракциялык типтеги өзгөрмөлөрдү кантип колдонууну билип алыңыз.

Эске салсак, математикалык китепкананын стандарттык функциялары DSP кыймылдаткычын иштетпейт, анткени алар ALU кураштыруу көрсөтмөсүнө которулат.

6. Үзгүлтүктөр менен иштөө

Төмөнкүдөй белгилүү бир функцияларды аткаруу үчүн үзгүлтүктөрдү колдонуңуз.

  • ADC баалуулуктарын окуу.
  • UARTтан жөнөтүү жана алуу.
  • PWM кызмат циклинин регистрлерин жаңыртуу.
  • CAN же I2C байланышы.

Үзгүлтүктөр бул функцияларды тез арада тейлейт, анткени аларды негизги бөлүктө функцияны чакыруу жолу менен же ички код аркылуу аткарат.

Үзгүлтүктөр талап кылынганда гана пайда болот, ал эми негизги бөлүктө коддолсо, while (1) циклинин ар бир кайталанышында аткарылат.

7. Мүмкүн болгон мыкты Компиляторлорду колдонуңуз

Компиляторлор, эгер туура конфигурацияланган болсо, кодду С тилинен ассемблер тилине которууда, жогоруда талкууланган айрым оптимизацияларды автоматтык түрдө ишке ашыра алышат. Компиляторуңуздан оптималдаштыруу параметрлерин издеңиз жана мүмкүн болсо, компиляторлордун кесипкөй версияларына көтөрүңүз, анткени алар күчтүү код оптимизатору.

8. Шарттуу билдирүүлөрдү акылдуулук менен колдонуңуз

  • Эгерде бир катар if-else билдирүүлөрүн колдонууда, эң биринчи кезектеги шартты сактаңыз. Ошентип, MCU чыныгы шартты тапкандан кийин бардык шарттарды карап чыгууга туура келбейт.
  • Switch-case билдирүүсү, адатта, if-else тезирээк болот.
  • Бир катар сүйлөмдөрдүн ордуна nested if-else операторлорун колдонуңуз. Эң начар (акыркы) абалга оптималдаштыруу үчүн көптөгөн билдирүүлөргө ээ болгон if-else блогун кичи филиалдарга бөлсө болот.

9. Inline Functions функциясын колдонуңуз

Коддо бир жолу гана колдонула турган функциялар туруктуу деп жарыяланат. Бул компиляторду ошол функцияны саптагы функцияны оптималдаштырууга мүмкүндүк берет, демек, функцияны чакыруу үчүн бир дагы жамаат коду которулбайт.

  • Функцияны "статикалык" ачкыч сөзүн колдонуп, анын ичинде деп жарыялоого болот.

10. Decremented Loops колдон

Кыскартылган цикл көбөйтүлгөн циклге салыштырмалуу азыраак жыйынды кодун жаратат.

Себеби өсүү циклинде цикл индексинин максималдуу мааниге жеткен-жетпегенин текшерүү үчүн цикл индексин ар бир циклдеги максималдуу маани менен салыштыруу үчүн салыштыруу көрсөтмөсү керек. Тескерисинче, азайтуу циклинде мындай салыштыруу эми кереги жок, анткени цикл индексинин азайган натыйжасы нөлгө жеткенде SREGдеги нөл желегин орнотот.

Цикл жүз жолу кайталанышы керек экендигин эске алганда, циклден бир көрсөтмөнү кыскартуу жүз эсе аткарылбай калат, андыктан цикл көп жолу кайталанышы керек болгондо таасири чоңураак болот.

Wrapping Up

Бул кеңештер пайдалуу болушу мүмкүн, бирок алардын чыныгы колдонулушу жана потенциалы программисттин чеберчилигинен жана анын кодундагы буйруктан көз каранды. Эсиңизде болсун, программанын көлөмү ар дайым эле аткаруу убактысын аныктай бербейт, кээ бир көрсөтмөлөр көбүрөөк саат циклдарын сарпташы мүмкүн, экинчиси дагы бир жолу программанын көндүмдөрү өз ролун ойношу керек.

Бул макала так жана автордун билими боюнча туура. Мазмун маалыматтык же көңүл ачуу максатында гана иштелип чыккан жана ишкердик, каржылык, юридикалык жана техникалык маселелерде жеке кеңеш же кесипкөй кеңеш менен алмаштырылбайт.

Сайтта Кызыктуу

Совет

Профилдик сүрөттөр үчүн 200+ кыска жазуулар
Интернет

Профилдик сүрөттөр үчүн 200+ кыска жазуулар

Cheeky Kid - Интернетте отуруп, чексиз маалыматты түшүнүп, көңүл ачып, көңүл ачып, көп убакытты сарптаган кибернаут.Сүрөт миң сөзгө татыктуу деп айтышат.Ошондой эле профилдик сүрөттөр да өзгөчө көрүнү...
Алыскы Иш тактанын кардарын Алыскы Иштакта Шлюзун колдонуу үчүн кантип конфигурациялоо керек
Ээм

Алыскы Иш тактанын кардарын Алыскы Иштакта Шлюзун колдонуу үчүн кантип конфигурациялоо керек

Сервердин инфраструктураларын жана маалымат борборунун ишин башкаруу боюнча 10+ жылдык тажрыйбасы бар системанын администратору / инженери.Бул окуу куралы Алыскы Иштакта Клиентин Алыскы Иштакта Шлюзун...