Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
diplom kz Микроконтроллер құрылғыларының.docx
Скачиваний:
57
Добавлен:
17.02.2016
Размер:
5.05 Mб
Скачать

2.2 Программаны түзеу және трансляциялау

Көптеген микроконтроллерлерге арналған сұлбалы эмуляторлар ICE (In-Circuit Emulator) жасалып шығарылады, олар жобаланған құрылғыларды түзету үшін қызмет етеді. Бұл эмуляторлар жобаланған құрылғыдағы микроконтроллерді физикалық түрде алмастырады, және берілген құрылғымен әзірлеушінің инетрфейсін іске асырады, ол программалық жабдқтамаға және аппаратты құралдарға қол жеткізуді қамтамасыз етеді. Көбінесе эмулятор өндірушілері программалық жабдықтаманың (редактор немесе компилятор) құрастыру жүйесімен оның интеграциясын қамтамасыз етеді, ол уақыт ағымында түзетуді жасауға мүмкіндік береді, микроконтроллердің уақыт ағымындағы күйін анықтау үшін жадының қайта программалануымен немесе біртіндеп енгізіп-шығарылуы (сонымен қатар светодиодты индикаторлар) үзілулер жоқ болғанымен байланысты. Қолданушы үшін ең басты бөгет болып бұл эмуляторлардың бағасы болып табылады, ол бірнеше мың долларға жетуі мүмкін.

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

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

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

Программалық түзеткіш

Программалық түзеткіш- процессордың жұмысын компьютердің экранында иммитациялайтын компьютерлік программа. Ол нағыз микросхеманың немесе қосымша сыртқы құралдардың бар болуы міндет емес және программаны таза виртуалды түрде түзетуге мүмкіндік береді.

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

Аппаратты түзеткіш

Түзеткіштің екінші түрі - аппаратты түзеткіш. Мұндай түзеткіштің негізі- арнайы плата, ол компьютерге қосылады, оның басқаруымен жұмыс жасайды және нағыз микроконтроллердің микросхемасының жұмысын иммитациялайды. Платада арнайы шығыстары болады, олар нағыз микросхемалардың шығыстарына сәйкес келеді, онда түзету барысында нағыз сигналдар пайда болады.

Осы шығыстардың көмегімен түзету платасы нағыз схемасына қосылуы мүмкін. Түзету кезінде пайда болатын электрлік сигналдарды осцилограф көмегімен бақылауға болады. Батырмаларға басып светодиодтар мен басқа да индикаторларды бақылауға болады. Сол уақытта компьютер экранында біз алдыңғы мысалдағыдай түзетіліп жатқан программа туралы барлық ақпаратты көруге болады:

  • Енгізу/шығару порттарын, ОЗУ, регистрлер құрамын бақылаға болады;

  • Программаның орындалу барысын басқару;

Аппаратты түзегіште программалық түзегіштегідей программаны қадам бойынша орындап останова нүктелерін қолдануға болады. Аппаратты түзеткіштің кемшілігі оның қымбат болуында.

Электронды құрылғылардың толықфункционалды программалық иммитаторлары

Түзеткіштің үшінші түрі бар. Ол электронды құрылғылардың толықфункционалды программалық имитаторлары. Бұл программалар компьютер экранында кез келген электронды сұлбаны «жинауға» мүмкіндік береді, ол өзіне әр түрлі электронды бөлшектерді қоса алады:

  • Транзисторлар;

  • Резисторлар;

  • Конденсаторлар;

  • Операционды күшкейткіштер;

  • Логикалық және сандық микросхемалар, соның ішінде микроконтроллерлер.

Мұндай программаларда әдетте электронды компоненттердің және электронды сұлбалардың конструкторының кең қорыы бар. Сұлбаны жинап, оның микроконтроллерінің жадысына виртуалды түрде программаны жазуға болады, одан кейін барлық сұлбаны «іске қосуға болады».

Сұлба жұмысының нәтижесін басқару үшін имитатордың виртуалды вольтметрлер, амперметрлер және осцилографтары бар, оларды сұлбаның кез келген нүктесіне «қосуға», әтүрлі кернеулерді «өлшеуге», және уақыт диаграммаларын «түсіруге» болады.

Осындай программалар қазіргі кезде көптеп таралып жатыр. Олар кез келген сұлбаны микроконтроллермен және микроконтроллерсіз, шын бөлшектер мен паяльникті қолданбай жасауға мүмкіндік береді. Компьютер экранында сұлбаны толықтай түзетіп алып одан кейін барып паяльникті қолға алса болады.

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

Программалау тілдері

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

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

Ассемблер тілі

Ассемблер тілі( ағлшын тілінен. to assemble –жинау)- ол машина тілінің бейнелі түде көрсетілуі. Ассемблер тілінің командалары машина тіліндегі командалармен салыстырғанда микропроцессор жүйесінің жұмыс істеу программасының құрастырылуын, оқылуын және түзетілуін айтарлықтай оңайлатуға жол ашады. Ассемблер тілі қарапайым программалау тілі деп саналады. Микропроцессордың машина командалары мен ассемблер тілінің командалары арасында іс жүзінде бірмағыналы сәйестік бар. Әр машиналық команда символ ретінде белгіленеді, ол ағылшын тіліндегі бұл команданың толық жазылуының қысқартылған түрінде болып келеді. Атауды кодтау символы және команданың құрамының сақталуы және қабылдануы нөл мен бірдің тізіміне қарағанда оңай болып келеді. Типті операциялардың және олардың мнемоникалы белгілерінің мысалдар 3.2.1 кестеде келтірілген. Мнемоникалы белгіде бағдарламаларда командаларда толық жиында жазуда операция код үшін сияқты қолданып жатыр, солай операндтар және олардың мекен-жайлары үшін бейнелі түрде атылармен соңғы көрініп жатыр.

Себебі микропрограммаланатын құрылым екілік кодтардың тек қана тілін қабылдайды, тіл трансляторы қажет (англ. Translator – бір тілден аудармашы), нақтылы бір программалау тілде жазған бағдарламаны машиналық кодтарға түрлендіреді. Машина кодтарға операциялар бейнелі түрде атаулар алмастыру жолымен машина тілде бағдарламалар әзірлеуі және бейнелі түрде мекен-жайларға абсолютті немесе салыстырмалы мекен-жайларды өзгерту ассемблерлеу (абсолютті мекен-жай деп – ең командада тікелей нақтыланған мекен-жай ; мекен-жай туралы анықталатын мекен-жай салыстырмалы) деп атайды.

Программалаушы листинг деп аталатын программаның басып шығаруын алады және бастапқы және трансляцияланған программа құрамында болады.

Кесте 2 - Типті операциялар*

Опреация

Ағылшынша атауы

Мнемоникалық белгіленуі

Жадыға жазу

STORE

ST

қосу

ADD

AD

азайту

SUBSTRACT

SUB немесе SU

жіберу

MOVE

MOV

жүктеу

LOAD

LD немесе L

1-ге арттыру

INCREMENT

INR

1-ге кеміту

DECREMENT

DCR

Логикалық ЖӘНЕ

AND

AN

Логикалық НЕМЕСЕ

OR

OR

НЕМЕСЕНІ алып тастау

EXCLUSIVE OR

XOR немесе XO

Екі санды салыстыру

COMPARE

CMP

Солға қарай 1 разрядқа жылжыту

ROTATE LEFT in CARRY

RLC

*қосымша-кесте «Предко Руководство По Микроконтроллерам» кітабынан алынған

Ассемблер Тілінде жазылған бағдарламаның аудармасын , машина кодқа жүзеге асыратын транслятор, ассемблер деп атаплады. Ассемблер тілі – программалаудың өте таралған тіл. Ассемблер тіліндегі программа – бұл есептердің түрлі шешімін суреттейтін (операторлардың) командалардың тізбегі. Барлық командалардың құрылымдары бірдей. Ассемблер тілінде жазылған команда, өрістер деп атаған төрті бөлікте жіктеледі : Белгі, Операция, Операнд, Түсініктеме. Қысқаша мінездеме төменде келтірген.

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

Операция –командамен алдын ала жазылған орындалатын әрекет. Операциялар жолында операцияның мнемоникалық коды болады.

Операндтар –мәліметтердің үстінде орындалатын операция. Операндтың жолына операндың өзі емес оның адресі орналасуы мүмкін. Егер бұл жолда екі операнд болса олардың арасына үтір қойылады.

Коментарий – бұл программисттерге команданы түсіндіру үшін қызмет ететін пайдалы ақпарат.

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

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

Асып кетулер шамасы бағдарламашының тәжірибесіне тәуелді. Айта кету керек, мамандандырылған бағдарламашы, ассемблерг тіліне қарағанда биік деңгей тілде бағдарламаны 5, …, 10 рет тез жаза алады. Осылайша, жоғарғы деңгейлі программалау тілінің негізгі ерекшелігі ол программаның жазылу ұзақтығының уақытын кеміту, программалауға кететін шығынның азаюы, бір ЭЕМ да жазылған программаны қолдану мүмкіндігі, егер осы тапсырманы басқа ЭЕМ да орындаса, программаларды айтарлықтай оңай басқару және пайдалануға салыстырмалы оңай беру.

Жоғарғы деңгейлі тілдер

Микроконтроллерді прграммалау үшін әртүрлі жоғарғы деңгейлі тілдерді қолдануға болады. «Жоғарғы деңгейлі тілдер» термині оңай оқылатын программаларды жазуға қолданатын тілдерді белгілеу үшін қызмет етеді, содан соң олар ассемблер тіліне аударылады (компиляцияланады) да микроконтроллер орындай алатындай объектілі кодқа түрленеді(биттер және байттар).

Бұл тілдердің тағайындалуы ортақ жай тілдер, олар микроконтроллердегі процессормен орындалатын обьектті кодты жасау үшін конвертацияланған («пор- тированы»), және микроконтроллердің кейбір ерекше қызметтерін іске асырылуын қамтамасыз етеді. Әр түрлі микроконтроллерге арналып жасалған көптеген компиляторлар бар, және ол генерациялайтын объектілі кодтың пайдалылығы өте жаман және өте жақсының арасында жүреді. Компилятордың ең жақсысы пайдаланушыға микроконтроллер құралдарының көп бөлігін ұсынады. Алынған объектілі кодтың пайдалылығы программа жадысының алатын орнынының көлемімен анықталады, ол мәліметтерді сақтау үшін оперативті жадының көлемі, және компиляцияланған кодты сақтау үшін қорды талап етеді.

Жоғарғы деңгейлі тілдердің ең танымалдары С, BASIC және Tortli. Бұл тілдер көптеген микроконтроллерлерге қол жетімді. Тағы да мамандандырылған тілдер бар, олар белгілі бір микроконтроллердің типтеріне арналған және олар универсалды болып табылмайды. Микроконтроллерлерге қолданатын программалау тілдері олардың атаулары бірдей болса да стандартты нұсқалардан айтарлықтай айырмашылықтары бар.

Жоғарғы деңгейлі тілдердің негізгі сипаттамалары:

  • Орнатылған функциялардың бар болуы(мысалы, консольды енгізу-шығару), олардың библиотекалары қосылған.

  • Мәліметтердің әртүрлі типтері (S-, 16-, 32-битті толық және жылжымылы нүктесімен)

  • Стекті қолдана отырып арифметикалық операциялардың орындалуы

  • «Локальді» және «глобальді» айнымалылар

  • Мәліметтердің бағытауыштары және құрылымдары

  • Жадыны үлестіру

  • Апаратты регистрлерге қол жеткізу

  • Симулятор/эмуляторға символикалық ақпарат

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

  • ROM программалық жадысының көлемінің аз болуы

  • RАM мәліметтер жадысының көлемінің аз болуы

  • Операциондық жүйенің немесе BIOSтың болмауы

  • Қайтаанықталатын енгізу-шығару (шығару сндық/аналогты /тізбектелген енізу-шығару ретінде қолданылса)

Бұл ерекшеліктер жоғарғы деңгейлі стандартты тілдерді және орнатылған кітапханаларды қолдану мүмкіндігін шектеуі мүмкін. Мысалы, кейбір қосымшаларға пайдалы кітапханаларға орнатылған функциялар көп жағдайда керек емес болып қалады. С тілінде стандартты кітапханалар консольді енгізу-шығару, мәліметтерді орналастыру, математикалық операциялар, мәліметтерді түрлендіру және тағы да басқа функцияларын өзіне қосады. Былайша осы барлық функциялар пайдалы болғанымен, оларды бір уақытта қолданатын қосымшаны таппауға болады. Ол дегеніміз, кітапханадан компонацияланған программа қолданбайтын функцияларды қосатыны белгілі. Персональді компьютерлердің жадысының көлемі салыстырамалы шексіз болғандықтан, қолданбалы программалардың сегменті жадыға жүктеліп қайта шығарылуы мүкін, және онда кітапханаларды сақтау мәселесі тумайды. Бірақ орнатылған микроконтроллерде жады көлемі шектеулі болғандықтан ондағы кітапханаларды қолдану міселесі туындау мүмкін.

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

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

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

FirstVar = FirstVar + SecondVar;

8 разрядты мәліметтерді өңдейтін келесі командалардың тізбегі көмегімен 8051 микропроцессорымен орындалады:

mov A, FirstVar ; бірінші айнымалыны таңдау

add A, SecondVar ; екінші айнымалымен қосу

mov FirstVar, А

16-разрядты айнымалыларды қолданғанда код қыйындай түседі:

mov A, FirstVar ; кіші 8 биттерді қосу

add A, SecondVar

mov FirstVar, А

mov A, FirstVar +1 ; үлкен 8 биттерді қосу

addc A, SecondVar + 1 ; жылжытумен қосу

mov FirstVar + 1, А

Бұл программалық код жылжытумен қосу(addc) арқылы команданы орындайтын микроконтроллермен іске асырылады. жылжытумен қосу кодын орындамайтын микроконтроллерге программалық код одан да қиындай түседі:

mov A, FirstVar ; кіші 8 биттерді қосу

add A, SecondVar

mov FirstVar, А

jnc Skip ;егер жылжыту орнатылмаса онда

үлкейуден аттап өту

inc FirstVar+1 ; үлкен 8 бит нәтижені үлкейту

Skip

mov A, FirstVar +1

add A, SecondVar +1

mov FirstVar+1, А

Берілген мысалда осындай операциялардың орындалуының салыстырмалы оңай нұсқасы келтірілген. Егер операция қыйын болып келсе (мысалы, «FirstVar=SecondVar + (ThirdVar * FourthVar)»), онда программалық кодтың қыйындауы экспоненциялды мінезге ие.

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

Қыйын операцияларда (мысалы, «FirstVar=SecondVar + (ThirdVar * FourthVar)») программалық код бірқатар стекті операция арқасында іске асырылуы мүмкін.

рush SecondVar

push ThirdVar

push FourthVar

mul

add

pop FirstVar

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

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

FirstVar=SecondVar + (ThirdVar * FourthVar);

Келесі операция тізбегі түрінде тиімдірек іске асады:

Temp = ThirdVar * FourthVar;

FirstVar = SecondVar + Temp;

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

FirstVar = ThirdVar * FourthVar;

FirstVar = FirstVar + SecondVar;

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

Жоғарғы деңгейлі тілдердің көбісінде екі түрлі айнымалы бар.

«Глобальді» айнымалылар программа орындалуының барлық уақытында қолданылады, олардың мәні қайта өзгермейді. Глобальді айнымалы ретінде негізінен теле программада немесе көптеген подпрограммаларды орындағанда қолданылатын айнымалылар(бұл жағдайда подпрограмма параметрі ретінде айнымалы мәнін тасымалдау тиімсіз болып табылады). Глобальді айнымалылар – қолмен енгізілген локальді айнымалылар анықталмағанша, программалау кезінде тек ассемблер тілінде ғана қолданылатын жалғыз айнымалының типі.

«Локальді» («автоматты») айнымалылар белгілі бір подпрограмма орындалғанда және оған хабарласқанда пайда болғанда ғана қолданылатын айнымалы. Бір біріне салынбаған екі подпрограммада бір локальді айнымалының тағайындалуы, компилятордың айнымалының бір ғана мәнін алатындығы белгілі болады. Әдетте локальді айнымалылар подпрограмма шақырғанда стекке жүктеледі де басқару, шақырушы программаға қайтарылғанда одан шығарылады. Локальді айнымалының мәні подпрограммадан шыққанда жоғалады. Подпрограммаға берілетін параметрлр әдетте (әрқашан емес) лкальді айнымалы болады. Ол дегеніміз подпрограмма орындалғанда олар модификациялануы мүмкін, бірақ олардың программаға берілетін алғашқы мәндері сақталып отырады.

Бағттауыштар және мәліметтер құрылымы үлкен көлемді жадыны қолданған кезде программалаудың пайдалылығын өсірудің маңызды құралы болп табылады. Бағттауыштар әдетте жады басқарылатын құрал ретінде болатын жүйелерде болады. Әдетте олар жадысының көлемі аз микроконтроллерді программалауға қолданылмайды. Қолданбалы программаларды әзірлегенде бұл микроконтроллерлерге бағттауыштардың орнына басқа әдісер қолданады. Бағттауыштардың орнына қоюдың негізгі әдісі болашақта қолданылатын жадының алдыңғы бөлігінде массивті жасау. Одан кейін бұл жадыдағы кез келген элементке үндеу үшін индекстер қолданылады.

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

struct instruct { // комана форматы

іnt address, // комана адресі

char instruct, // Команда