Әртүрлі

Микроконтроллерлердегі кодты оңтайландыру

Автор: Laura McKinney
Жасалған Күн: 4 Сәуір 2021
Жаңарту Күні: 16 Мамыр 2024
Anonim
Микроконтроллерлердегі кодты оңтайландыру - Әртүрлі
Микроконтроллерлердегі кодты оңтайландыру - Әртүрлі

Мазмұны

Автор өзінің инженерлік жобасын dsPic микроконтроллерлерімен аяқтап, осы құрылғылар туралы кең түсінік алды.

Микроконтроллердің C тіліндегі коды белгілі бір жетілдірілген қосымшаларда оңтайландыруды қажет етуі мүмкін. Бұл кодты оңтайландыру екі маңызды нәрсені азайту үшін қолданылады:

  1. Код мөлшері: Микроконтроллерлер шектеулі деректер мен нұсқаулықтарды сақтай алады, себебі олардың жедел жады көлемі шектеулі. Сондықтан кодты оңтайландыру қажет, осылайша қолда бар нұсқаулық пен деректер жадын тиімді пайдалану мүмкін болады.
  2. Кодты орындау уақыты: Микроконтроллерлер - бұл бір уақытта бір команданы орындайтын дәйекті құрылғылар. Әрбір құрастыру нұсқаулығы өзін-өзі орындау үшін белгілі бір сағат циклдарын жұмсайды. Сондықтан кодты ең аз сағаттық циклдарда немесе құрастыру нұсқауларында қажетті тапсырманы орындайтындай етіп оңтайландыру қажет. Код аз сағат циклдарын қолданса, соғұрлым ол тезірек жұмыс істейді. Бұл дегеніміз, қосымшалар тезірек жұмыс істей алады, өйткені өңдеу уақыты азайтылады.

Бұл мақалада микроконтроллер кодының мөлшері мен орындалу уақытын қысқарту үшін қолдануға болатын кеңестер мен кеңестер берілген.


Microchip-тің MplabX әзірлеу IDE-і қажет болған жағдайда мысалдарды көрсету үшін қолданылады.

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

Сіздің кодыңыз нақты уақытта қанша уақытты орындайтындығы туралы түсінік алу үшін оны эксперименталды түрде өлшеу қажет. Логикалық анализаторды кодтың орындалу уақытын өлшеу үшін ыңғайлы түрде пайдалануға болады және қызығушылық танытушылар бұл туралы электрондық пошта арқылы біле алады. Мұның қасында:

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

1. Микроконтроллердің өңдеу қуатын және жад көлемін біліңіз

Микроконтроллердің өңдеу жылдамдығының шынайы көрінісін беретін әрдайым тактілік жиілік (МГц) бола бермейді, ал нақты өлшем - бұл MIPS (секундына мега нұсқаулар) немесе MCU бірнеше секунд ішінде орындай алатын нұсқаулар.

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


Микроконтроллерлерде мәліметтер мен бағдарлама кодтарын сақтауға арналған бөлек жады бар. Олардың екеуінің де өлшемдерін мәліметтер парағынан табуға болады. Егер сіздің кодыңыз айтарлықтай үлкен болса, сізге үлкен жад өлшемі бар MCU қажет болуы мүмкін.

2. Код өлшемінде оңтайландыру үшін айнымалыларды таңдау

Микроконтроллерлерде, әдетте, 1-ден 4 Кбайтқа дейінгі шектеулі деректер жады бар. Бұл жағдайда сақталатын күннің болжамды диапазонына сәйкес ең қолайлы айнымалы түрін таңдаған дұрыс. Төмендегі кестеде осы айнымалылар қысқаша келтірілген:

Си тілінде қолданылатын айнымалылардың қысқаша мазмұны.

Айнымалы түріӨлшемі байтпенАуқым

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. Қол жетімді ең жақсы компиляторларды қолданыңыз

Компиляторлар жоғарыда талқыланған кейбір оңтайландыруларды автоматты түрде C-тілінен ассемблер тіліне кодты дұрыс конфигурациялау кезінде жүзеге асыра алады. Өзіңіздің компиляторыңыздан оптимизация опцияларын іздеңіз және мүмкін болса компиляторлардың кәсіби нұсқаларына жаңартыңыз, өйткені олар кодтың оңтайландырғыштары болып табылады.

8. Шартты мәлімдемелерді ақылмен қолданыңыз

  • If-else операторларының тізбегін қолданған кезде ең алдымен ықтимал шарт сақталады. Осылайша, MCU шынайы жағдайды тапқаннан кейін барлық шарттарды қарап шықпайды.
  • Switch-case операторы, әдетте, if-else жылдамырақ болады.
  • Бірнеше сөйлемнің орнына кірістірілген if-else операторларын қолданыңыз. Ең көп (соңғы) жағдайға оңтайландыру үшін көптеген операторлары бар if-else блогын кіші тармақтарға бөлуге болады.

9. Кірістірілген функцияларды қолданыңыз

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

  • Функцияны қатарда 'статикалық' кілт сөзін қолдану арқылы жариялауға болады.

10. Азайтылған ілмектерді қолданыңыз

Азайтылған цикл өсірілген циклмен салыстырғанда аз жинақтау кодын жасайды.

Себебі өсу циклында цикл индексінің максималды мәнге жеткендігін тексеру үшін цикл индексін әр циклдегі максималды мәнмен салыстыру үшін салыстыру нұсқаулығы қажет. Керісінше, азайту циклінде бұл салыстырудың қажеті жоқ, өйткені цикл индексінің азайтылған нәтижесі нөлге жетсе, SREG-де нөлдік жалаушаны орнатады.

Циклдің жүз рет қайталануы керек екенін ескере отырып, циклдан бір нұсқауды азайту оның жүз рет орындалуынан сақтайды, сондықтан цикл бірнеше рет қайталануы керек болған кезде әсер маңызды болады.

Қаптау

Бұл кеңестер пайдалы болуы мүмкін, бірақ олардың шынайы қолданылуы мен потенциалы бағдарламашының шеберлігіне және оның кодындағы бұйрыққа байланысты. Есіңізде болсын, бағдарламаның өлшемі әрқашан орындалу уақытын анықтай бермейді, кейбір нұсқаулар сағат циклдарын көбірек алуы мүмкін, ал екіншісі - бағдарламаның дағдылары тағы да өз рөлін ойнауы керек.

Бұл мақала автордың біліміне сай дәл және шынайы. Мазмұн тек ақпараттық немесе ойын-сауық мақсаттарына арналған және іскери, қаржылық, заңгерлік немесе техникалық мәселелерде жеке кеңес немесе кәсіби кеңес алмастырмайды.

Қызықты Бұйымдар

Соңғы Жазбалар

Sapphire Nitro + RX 570 MSI GTX 1080 Duke қарсы
Компьютерлер

Sapphire Nitro + RX 570 MSI GTX 1080 Duke қарсы

Мен дәрігердің көмекшісі болып жұмыс істейтін кішкентай ғана жігітпін. Менің құмарлығым ДК құру және ДК жабдықтарын тексеру / қарау.Бәріне сәлем, Will осында. Бүгін мен сізге графикалық картаның өнімд...
Оның қызмет ету мерзімін ұзарту үшін MacBook батареясына мұқият болыңыз
Компьютерлер

Оның қызмет ету мерзімін ұзарту үшін MacBook батареясына мұқият болыңыз

Мен Apple құрылғыларын жақсы көремін және оларды пайдалану және қызмет көрсету туралы кеңестер бергенді ұнатамын.Apple MacBook батареяның ұзақ қызмет ету мерзімімен танымал. Бұл Apple қолданып отырған...