Проектування мікропроцесорних систем

Вступ

Завдання розробки обчислювальних системіз застосуванням мікроконтролерів вимагає знання та розуміння принципів їхньої роботи, але головне - складати керуючі програми. Мета цієї книги навчитися розробляти мікроконтролерні пристрої.

Як базова мікросхема для всіх наведених у книзі прикладів використана мікросхема Atmega 128 популярного мікропроцесорного сімейства AVR фірми Atmel. Передбачається, що читач має основні уявлення як про принципи мікропроцесорної техніки, так і про особливості архітектури цього мікроконтролера.

Програма для мікроконтролера- це набір кодів, який записується у його спеціальну програмну пам'ять. Програму має написати програміст, який розробляє ту чи іншу конкретну мікропроцесорну систему, проте ніколи не має справу з кодами. Для людини зручніше оперувати з командами, кожна з яких має свою осмислену назву. Тому для написання програми використовується мова програмування.

Головне завдання мови-однозначно описати послідовність дій, яку має виконати мікроконтролер. У той же час мова має бути зрозумілою людині.

У процесі створення програми програміст просто пише її текст на комп'ютері так само, як і будь-який текст. Потім програміст запускає спеціальну програму – транслятор, який перекладає текст, написаний програмістом у машинні коди, зрозумілі мікропроцесору.

Написаний програмістом текст програми називається вихіднимабо об'єктним кодом. Код, отриманий в результаті трансляції, називається результуючимабо машинним кодом. Саме цей код записується у програмну пам'ять мікроконтролера. Для запису результуючого коду застосовуються спеціальні пристрої - програматори.

Усі мови програмування поділяються на дві групи:

· мови низького рівня (машинноорієнтовані);

· мови високого рівня.

Типовим прикладом машинноорієнтованої мови є мова Асемблер. У недавньому минулому мова Асемблера була єдиною мовою для програмування мікроконтролерів. В даний час для складання програм використовуються мови високого рівня, такі як Бейсік, Сіі т.п. Ці мови свого часу були розроблені для великих комп'ютерів. Але зараз широко використовують і для мікроконтролерів.

Перевагою мов високого рівня є значне прискорення процесу розробки програми. З усіх мов високого рівня найефективнішим, мабуть, є мова Сі. Тому надалі для ілюстрації виберемо цю мову. Для різних сімейств мікропроцесорів розроблено свої версії мов. Наприклад, для мікропроцесорів сімейства AVR – З AVR.

Глава1. Написання програм для мікроконтролерів

Елементи мови Сі

Регістри МК (регістри - це осередки-байти в пам'яті МК AVR) у програмі на Сі мають назви і оскільки числа у більшості з них можна змінювати - для програми регістри є по суті змінними.
Змінна- це набір осередків у пам'яті у яких можна зберігати число чи числа та змінювати їх. Змінна має адресу та ім'я.

Константа- це як змінна, але міняти вміст не можна.

Константи

Константами називаються перелічені величини у програмі. У мові СІ поділяють чотири типи констант: цілі константи, константи з плаваючою комою, символьні константи та рядковими літерали.

Ціла константа: це десяткове, вісімкове, шістнадцяткове або двійкове число, Яке представляє цілу величину в одній з наступних форм: десяткової, вісімковій, шістнадцятковій або двійковій.

Десяткова константа складається з однієї або декількох десяткових цифр, причому перша цифра не повинна бути нулем (інакше число буде сприйнято як вісімкове).

Восьмерична константа складається з обов'язкового нуля і однієї або кількох вісімкових цифр (серед цифр повинні бути відсутні вісімка і дев'ятка, тому що ці цифри не входять у вісімкову систему числення).

Шістнадцяткова константа починається з обов'язкової послідовності 0х або 0Х і містить одну або кілька шістнадцяткових цифр (цифри є набором цифр шістнадцяткової системи числення: 0,1,2,3,4,5,6,7,8,9,A,B, C, D, E, F).

Двійкова константа записується за допомогою бінарних символів, яким повинна передувати послідовність 0b.

наприклад - Цілі числаможуть бути записані:

У десятковій формі: 12234 -5493

У двійковій формі з префіксом 0b так: 0b101001

У шістнадцятковій формі з префіксом 0x так: 0x5А

У восьмеричній формі з префіксом 0 так: 0775

Якщо потрібно сформувати негативну цілу константу, то використовують знак "-" перед записом константи (який називатиметься унарним мінусом). Наприклад: -0x2A, -088, -16.

Кожній цілій константі надається тип, що визначає перетворення, які повинні бути виконані, якщо константа використовується у виразах. Тип константи визначається так:

Десяткові константи розглядаються як величини зі знаком, і їм надається тип int (ціла) або long (довга ціла) відповідно до значення константи. Якщо константа менше 32768, їй присвоюється тип int, інакше long.

Восьмеричним та шістнадцятковим константам надається тип int, unsigned int(беззнакова ціла), longабо unsigned longзалежно від значення константи згідно з табл.1.1.

Таблиця 1.1

Діапазон шістнадцяткових констант Діапазон вісімкових констант Тип
0x0 - 0x7FFF 0 - 077777 int
0X8000 - 0XFFFF 0100000 - 0177777 unsigned int
0X10000 - 0X7FFFFFFF 0200000 - 017777777777 long
0X80000000 - 0XFFFFFFFF 020000000000 - 037777777777 unsigned long

Число з плаваючою точкою складається з цілої та дробової частини та (або) експоненти. Константи з плаваючою точкою є позитивними величинами подвоєної точності (мають тип double). Для визначення негативної величини необхідно сформувати константний вираз, що складається із знаку мінуса та позитивної константи.

Приклади: 115.75, 1.5Е-2, -0.025, .075, -0.85Е2

Символьна константа - є символом ув'язненим в апострофи. Значенням символьної константи є цифровий код символу.

Наприклад, "Q" - буква Q.

Символьні константи мають тип int і за перетворення типів доповнюються знаком.

Рядкова константа (літерал) - послідовність символів (включаючи рядкові та великі літери російської та латинської а також цифри) укладені в лапки (").

Наприклад, "Heloo"

Символи рядкового літералу зберігаються в області оперативної пам'яті. В кінець кожного рядкового літералу компілятором додається нульовий символ, що представляється послідовністю, що управляє \0. Рядковий літерал має тип char.

1.1.2. Ідентифікатор

Ідентифікатор називається послідовність цифр і букв, а також спеціальних символів, за умови, що першою стоїть буква або спеціальний символ. Для утворення ідентифікаторів можуть бути використані малі або великі літери латинського алфавіту. Як спеціального символуможе використовуватися символ підкреслення (_). Два ідентифікатори для освіти яких використовуються збігаються малі і великі літери, вважаються різними. Наприклад: abc, ABC, A128B, a128b.

Ідентифікатор створюється на етапі оголошення змінної, функції, структури тощо. після цього його можна використовувати в наступних операторах програми, що розробляється. Ідентифікатор не повинен співпадати з ключовими словами, із зарезервованими словами та іменами функцій бібліотеки компілятора мови СІ.

Ключові слова

Типи даних та їх оголошення

Важливою відмінністю мови СІ від інших мов є відсутність принципу замовчування, що призводить до необхідності оголошення всіх змінних, що використовуються у програмі явно разом із зазначенням відповідних їм типів.

Формат оголошення змінних має такий вигляд:

[]

- Специфікатор класу пам'яті - визначається одним з чотирьох ключових слів мови СІ: auto, extern, register, static, і вказує, яким чином розподілятиметься пам'ять під оголошену змінну, з одного боку, з другого, область видимості цієї змінної, тобто. ., з яких частин програми можна до неї звернутися. Чи не обов'язковий елемент і він потрібен тільки в деяких випадках.

- якщо змінна може використовуватись в інших файлах вихідного кодупрограми;

- якщо змінна локальна, то оголошена у якійсь функції після дужки і має зберігати свої значення до наступного виклику цієї функції;

- Розмістити змінну в регістрах МК.

Глобальні змінніоголошуються до появи в тексті будь-якої функції. Після оголошення глобальні змінні доступні у будь-якій функції програми.

Локальні змінніоголошуються на початку функцій- тобто. після фігурної дужки.

- специфікатор типу даних, яких може зберігати змінна.

Для визначення даних цілого типу використовуються різні ключові слова, які визначають діапазон значень та розмір області пам'яті, що виділяється під змінні.

Наприклад,

Unsigned char - зберігає число від 0 до 255 (байт);

Unsigned Int - зберігає число від 0 до 65 535 (два байти);

Unsigned long Int- зберігає число від 0 до 4294967295 (чотири байти).

Замість Unsigned char можна писати просто char, оскільки компілятор за умовчанням вважає char беззнаковим.

Signed char означає знакову змінну і зберігає число від -128 до 127.

Ключові слова signed та unsigned вказують як інтерпретується нульовий бітоголошеної змінної, тобто, якщо зазначено ключове слово unsigned (беззнаковий), то нульовий біт інтерпретується як частина числа, інакше нульовий біт інтерпретується як знаковий. У разі відсутності ключового слова unsigned ціла змінна вважається знаковою. У тому випадку, якщо специфікатор типу складається з ключового типу signed або unsigned і далі слідує ідентифікатор змінної, то вона буде розглядатися як змінна типу int. Наприклад:

unsigned int n; unsigned int b; int c; (мається на увазі signed int c); unsigned d; (мається на увазі unsigned int d); signed f; (мається на увазі signed int f).

Змінна будь-якого типу може бути оголошена як немодифікована. Це досягається додаванням ключового слова const до специфікатора типу. Об'єкти з типом const є дані використовувані лише для читання, тобто. цій змінній не може бути надано нове значення. Зазначимо, якщо після слова const відсутня специфікатор-типу, то мається на увазі специфікатор типу int. Якщо ключове слово const стоїть перед оголошенням складових типів(масив, структура, суміш, перерахування), це призводить до того, кожен елемент також має бути немодифицируемым, тобто. значення йому може бути надано лише один раз.

const double A=2.128E-2;const B=286; (мається на увазі const int B = 286) consnant char_string constant = "this is a string constant"

Дані плаваючого типу

Для змінних, що представляють число з точкою, що плаває, використовуються наступні модифікатори-типу: float, double, long double (у деяких реалізаціях мови long double СІ відсутня).

Величина з модифікатором-типу float займає 4 байти. З них 1 біт відводиться для знака, 8 біт для надмірної експоненти та 23 біти для мантиси. Зазначимо, що старший біт мантиси завжди дорівнює 1, тому він не заповнюється, у зв'язку з цим діапазон значень змінної з точкою, що плаває, приблизно дорівнює від 3.14E-38 до 3.14E+38. Розмір типу double займає 8 байт у пам'яті. Її формат аналогічний формату float. Біти пам'яті розподіляються так: 1 біт для знака, 11 біт для експоненти і 52 біта для мантиси. З урахуванням опущеного старшого біта мантиси діапазон значень дорівнює від 1.7E-308 до 1.7E+308.

float f, a, b; double x, y;

- Ім'я змінної. Наприклад imy peremennoi.

Для змінних прийнято використовувати маленькі літери, а відмінності імен змінних від назви функцій імена змінних можна розпочинати з літери, а назва функцій (крім main) із символу підкреслення.

Наприклад, моя переменна , _vasha funkzia.

Глобальні змінні, а також локальні змінні з модифікатором static при старті та рестарті програми дорівнюють 0, якщо їм не надали інші значення.

Декілька прикладів оголошення змінних:

Unsigned Char my_peremen=34; /* my_peremen визначено як Unsigned Char , з присвоєнням значення 34 (можна і без присвоєння) */

Unsigned Int big_ peremen=34634; /* big_ peremen оголошено як Unsigned Int */.

Оголошення масиву

Масиви – це група елементів однакового типу (double, float, int тощо). З оголошення масиву компілятор повинен отримати інформацію про тип елементів масиву та їх кількість. Оголошення масиву має два формати:

специфікатор-типу описувач [константний – вираз];

специфікатор-типу описувач;

Описувач – це ідентифікатор масиву.

Специфікатор-типу задає тип елементів масиву, що оголошується. Елементами масиву не можуть бути функції та елементи типу void.

Константний-вираз у квадратних дужкахзадає кількість елементів масиву. Константний-вираз при оголошенні масиву може бути опущений у таких випадках:

При оголошенні масив інціалізується;

Масив оголошено як формальний параметр функції.

У мові Сі визначено лише одновимірні масиви, але оскільки елементом масиву може бути масив, можна визначити і багатовимірні масиви. Вони формалізуються списком константних виразів наступних за ідентифікатором масиву, причому кожен константний вираз полягає у своїх квадратних дужках.

Кожен константний вираз у квадратних дужках визначає кількість елементів за даним виміром масиву, так що оголошення двовимірного масиву містить два константні вирази, тривимірного – три і т.д. Зазначимо, що у мові Сі перший елемент масиву має індекс 0.

Char mass – нумерація елементів починається з 0, тобто. елементи даного масиву називаються як mass, mass і в них зберігаються числа 11, 22, 33. Десь у програмі елементу можна присвоїти значення, наприклад mass = 210. Можна елементам не надавати значення.

Строкова змінна або масив, що містить рядок символів, наприклад,

Char stroke = "Hello" визначає 6 елементів, хоча в ній міститься лише п'ять символів. Шостим елементом є символ керування, який додається в кінці рядка \0.

Символьний масив можна оголосити без вказівки кількості елементів.

Наприклад,

Char str = "оголошення символьного масиву"

Вирази та присвоєння

Опепранди та операції

Комбінація знаків операцій та операндів, результатом якої є певне значення, називається виразом. Знаки операцій визначають дії, які мають бути виконані над операндами. Кожен операнд у виразі може бути виразом. Значення виразу залежить від розташування знаків операцій та круглих дужок у виразі, а також пріоритету виконання операцій.

У мові СІ надання також є виразом, і значенням такого виразу є величина, яка присвоюється.

Операнд - це константа, літерал, ідентифікатор, виклик функції, індексний вираз, вираз вибору елемента або складніший вираз, сформований комбінацією операндів, знаків операцій та круглих дужок. Будь-який операнд, який має константне значення, називається константним виразом. Кожен операнда має тип.

Щоб помістити число у змінну (у регістр) у мові Сі є оператор присвоювання “ = ”. Цей символ в Сі означає обчислити результат того, що праворуч від оператора присвоювання і помістити цей результат в перемінну ліворучоператора присвоєння.

1.PORTB=PINB+34; /* Цей рядок на Сі означає Взяти (прочитати) значення змінної (реєстру) PINB, потім додати до нього число 34 і помістити результат у змінну PORTB */

2. ЗМІННА = PINC; /* Цей рядок на Сі означає взяти (прочитати) значення змінної (реєстру) PINC і помістити результат у змінну з ім'ям ЗМІННА */
3.Рядок де змінна стоїть ліворуч від “ = “ але через знак & PORTB& =0x23; на Сі означає - прочитати вміст змінної PORTB, потім виконати "порозрядне (побітне) логічне І" між прочитаним значенням і числом 0x23 і помістити (записати, присвоїти) результат у змінну PORTB 4. Рядок де змінна стоїть безпосередньо зліва від "=" PORTB= 0x23; на Сі означає - не читаючи вміст змінної PORTB привласнити їй значення 0x23 знищивши те, що було там раніше.
Замість & "І" (AND - тільки 1 і 1 дають 1) можуть бути інші побиті логічні операції: | "АБО" (OR тільки 0 і 0 дають 0) ^ "Виключає АБО" (XOR змінити біт навпроти "1") ~ "інвертування бітів" (INV змінити біти регістру на протилежні символи) та арифметичні операції: + - * / %
З оператором присвоєння використовуються скорочення:
ДОВГИЙ ЗАПИС ДУМКА СКОРАЧУЄТЬСЯ ДО
x = x +1; додати 1 x++; або ++x;
x = x – 1; відняти 1 x--; або --x;
x = x + y; додати y x += y;
x = x – y; відняти y x -= y;
x = x * y; помножити на y x *= y;
x = x/y; поділити на y x /= y;
x = x % y; залишок від розподілу x %= y;
x--; відняти 1 x -= 1;
x++; додати 1 x + = 1;

Є в Сі операції, які змінюють значення змінної і без оператора присвоювання:

PORTA++;/* Цей рядок на Сі означає Взяти значення змінної PORTA додати до неї 1 і записати результат назад у PORTA . Інкрементуватирегістр PORTA */

PORTC--;/* Цей рядок на Сі означає зворотну дію! Декрементувати- відняти 1 від значення регістру PORTC */

Коли інкремент або декремент використовується у виразі то важливо, де стоять два знаки + або - перед змінною або після змінної:

a=4; b = 7; a = b++;/* Цей рядок на Сі означає: взяти значення змінної b присвоїти його змінної a потім додати 1 до змінної b і зберегти результат в b. b = 7; a = ++b;/* Цей рядок на Сі означає: взяти значення змінної b потім додати до нього 1 і зберегти результат в b і цей же результат привласнити змінної a. Тепер a буде містити число 8 і b міститиме число 8 */ .2 Арифметичні операції в Сі x + y // складання x - y // віднімання x * y // множення x / y / * розподіл. Якщо числа цілі результат - ціле число з відкинутою дробовиною - не округлене. Тобто. якщо в результаті поділу виходить 6.23411 або 6.94, то результат буде просто ціле число 6. Якщо числа з плаваючою точкою, тобто float або double і записуються з точкою і числом після точки, то і результат буде число з точкою, що плаває, без відкидання дробової частини 131.9739 / 6.18 дасть 21.355 */ x % y// обчислити залишок від поділу націло Приклади:

x< y // X меньше Y
x > y // більше
x<= y // меньше или равно
x >= y // більше чи одно
x == y // одно
x != y /* не дорівнює Результат виконання цих операторів: "істина" це "1" (точніше "не нуль"), "хибно" це "0". Значення, що зберігаються в змінних (у регістрах)
х
і уНЕ змінюються. Беруться (зчитуються) значення, що зберігаються (або містяться) у змінних і порівнюються */

1.2.5.Логічні операції:

|| // "АБО" - тільки "брехня" і "брехня"

// дають "брехню"

&& // "І" - тільки "істина" та "істина"
// дають "істина"

! // "НЕ" - логічне заперечення

В результаті логічної операції виходить не число, а логічне значення "істина" або "брехня".

Для логічних операцій && та || беруться результати виразів зліва та праворуч від знака операції перетворені на "істину" або "брехня"та визначається логічний результат операції.

Компілятор результат "істина" перетворює на 1 а не на будь-яке відмінне від 0 число.

Логічні операції можуть об'єднувати кілька умов, що перевіряються.

Наприклад:

if((вираз1)&&((вираз2)||(вираз3))))
{ /* Код програми тут виконуватиметься якщо:

Вираз1 "Істина" (означає не нуль) і хоча б один з виразів 2 і 3 теж "Істина" (означає не нуль).
} ;

1.3. Конструкції, що використовуються на Сі

1.if(){} else(); ідеальна конструкція якщо потрібно виконати якусь частину програми за наявності будь-яких умов або за їх відсутності:

} else(не обов'язковий елемент конструкції, без нього конструкція виглядає так:

if (вираз) ( код на Сі / * робити цей код якщо вираз"Істина" - тобто. результат його обчислення не нуль */
};

if(PINB.5) (виконання коду Сі);
/* якщона ніжці PB5 є "1" (не "0" означає "істинно") програма виконає код, а якщо на ній "0" (означає "хибно") то не зробить, а просто піде далі, на наступний рядок */

2.while() (); умовний цикл (цикл з умовою) - використовується якщо потрібно виконувати якийсь код програми поки виконується (існує,
"істино" - означає "не нуль") деяка умова, результат обчислення виразу:

while (вираз ) (код на Сі /* виконати цей код якщо вираз "істина" - тобто результат його обчислення не нуль. Поки виконується цей код вираз не перевіряється на істинність. Після виконання коду відбувається перехід до рядка whileзнову перевіряти істинність вираження */
};

Наприклад:

while(PINA.6) (виконання коду Сі);
/* покина ніжці PA6 є "1" (не "0" означає "істинно") то програма виконає код, і знову перевірить що на PA6 */ Якщо біт_6 став "0" то програма піде далі не виконуючи того що в ( )

Цикл whileмає варіант

Do - while

при якому код ( ) виконується щонайменше один раз незалежно від істинності умовиу дужках:

do(код на Сі /* виконати цей код один раз потім, якщо вираз є "істина" - тобто результат його обчислення не нуль - знову виконати код з початку, і так доти, поки вираз істина */ ) while ( вираз); Цикли for(;;) і while() часто використовують так: while(1); for(;;); Так написані ці цикли означають: МК виконувати цей рядок поки є харчування, немає скидання і немає переривання. Коли виникає переривання, програма переходить на обробник переривання і (якщо обробнику немає переходу на інше місце програми) після завершення коду оброблювача знову повертається у цей цикл. */ while(1)( код програми); for (;;) (код програми); 4.for(;;)(); - цей цикл дозволяє виконати частину програми потрібну кількість разів:

char i; /* оголошення змінної для forце звичайна змінна Сі і отже може мати будь-яке допустиме ім'я за вашим бажанням і тип */

for(i=5; i<20; i+=4) {
код на Сі /* Спочатку буде визначено "істинно" або "хибно" контрольний вираз i<20. Так как переменной i присвоено значение 5 то контрольное выражение "истинно" и код цикла forбуде вперше виконаний для i=5, потім за виразом i+=4, i стане 9 , тепер знову буде перевірено істинність (справедливість, виконання) контрольного вираз i<20 и так как 9<20 код цикла forбуде виконаний ще раз для i=9. Так відбуватиметься до того часу, поки результат обчислення контрольного висловлювання дає "істинно". Коли результат стане "хибно" - програма вийде із циклу forне виконуючи код. */
};

i = 5 це початковий вираз, що на початку буде в змінній i.Число 5 просто для прикладу, може бути таким, як дозволяє оголошення типу змінної i, у нашому випадку це charу більшості компіляторів за замовчуванням це без знакового символьного типу - він може зберігати числа від 0 до 255

i< 20 - контрольное выражение. Может быть с разными операторами отношения, важливо лишещоб у процесі циклу воно ставало колись " брехнею " - інакше цикл " зациклиться " тобто. ніколи не скінчиться.

i += 4 – це лічильник або зміна змінної циклу. Зазвичай це i++тобто. до змінної додається 1 кожен "прогін" циклу. Але знову ж таки може бути таким, яке вам потрібно.

Початковою умовою- можливо будь-яке допустиме в Сі вираз результатом якого є ціле число.

Контрольний вираз- визначає доки буде виконуватися цикл.

Лічильник- Показує як змінюється початкове вираз перед кожним виконанням нового циклу.

Вираз- може бути не просто змінна, а функція інших змінних, наприклад:

i = (7 + i * 4) або i = (функція інших змінних).

5. switch()(); - Оператор множинного вибору, дозволяє зробити вибір з декількох варіантів.

Вираз, що йде за ключовим словом switch у круглих дужках, може бути будь-яким виразом, допустимим у мові СІ, значення якого має бути цілим. Значення цього виразу є ключовим для вибору кількох варіантів. Тіло оператора switch складається з кількох операторів, позначених ключовим словом case з наступним константним виразом. Усі константні вирази в операторі switch мають бути унікальними. Крім операторів, позначених ключовим словом case, можливо, але обов'язково один, фрагмент позначений ключовим словом default. Список операторів може бути порожнім або містити один або більше операторів. Причому в операторі switch не потрібно укладати послідовність операторів у фігурні дужки.

Схема виконання оператора switch наступна:

Обчислюється вираз у круглих дужках;

Обчислені значення послідовно порівнюються з константними виразами, що йдуть за ключовими словами case;

Якщо один із константних виразів збігається зі значенням виразу, то керування передається на оператор, позначений відповідним ключовим словом case;

Якщо жоден із константних виразів не дорівнює виразу, то керування передається на оператор, позначений ключовим словом default, а у разі його відсутності керування передається на наступний після switch оператор.

Усі оператори, між початковим оператором і кінцем тіла, виконуються незалежно від ключових слів, якщо тільки якийсь оператор не передасть управління з тіла оператора switch. Таким чином, програміст повинен сам подбає про вихід з case, якщо це необхідно. Найчастіше для цього використовують оператор break.

switch(вираз) (

case 5: код на Сі
/* цей код буде виконуватися якщо результат обчислення виразу дорівнює числу 5 на цьому робота оператора switchзакінчиться */
break;

case -32: код на Сі
/* цей код буде виконуватися якщо результат обчислення виразу дорівнює отрицательномуц числу -32. На цьому робота оператора switchзакінчиться */
break;

case "G": код на Сі
/* цей код буде виконуватися якщо результат обчислення виразу дорівнює числу відповідного символу G в таблиці ASCII. На цьому робота оператора switchзакінчиться */
break;

default:код на Сі
/* цей код буде виконуватися якщо результат обчислення виразу не дорівнює ні 5 ні -32 ні "G", а так само після виконання коду не
має наприкінці break;

На цьому робота оператора switchзакінчиться */
};

/* switchзакінчено - виконується подальший код програми */

case- може бути стільки скільки потрібно, щоб програма працювала швидше, найбільш ймовірні варіанти слід розташовувати вище.

default- Не обов'язковий. Його можна розташувати і наприкінці.

break;- якщо його не використовувати то знайшовши потрібний варіант програма виконуватиме і наступні умови case.

6.goto- Оператор безумовного (негайного) переходу.

Оператор goto передає керування на оператор, позначений міткою ім'я-мітки. Позначений оператор повинен знаходитися в тій же функції, що і оператор goto, а мітка, що використовується, повинна бути унікальною, тобто. одне ім'я не може бути використане для різних операторів програми. Ім'я-мітки – це ідентифікатор. якийсь код нашої програми на... mesto_5:/* сюди ми потрапимо після виконання рядка програми goto mesto_5 */ код буде виконуватися після goto mesto_5; ... якийсь код нашої програми на... město_1:/* сюди ми потрапимо після виконання рядка програми goto mesto_1 */ код буде виконуватися після goto mesto_1; ... якийсь код нашої програми на Сі... goto mesto_1;/* перейти в те місце програми де на початку рядка написано mesto_1: */ ... якийсь код нашої програми на Сі... goto mesto_5; /* перейти в те місце програми де на початку рядка написано mesto_5: */ ... якийсь код нашої програми на Сі.

Приклад програми на Сі

/*пункт 1заголовок програми

Він оформляється як коментар, і зазвичай містить інформацію

Про назву, призначення, версію та автора програми
- короткий опис алгоритму програми
- Пояснення про призначення висновків МК та режим його роботи, ф'юзи
- компілятор, інструменти та їх версії
- інші відомості, які ви вважаєте корисним вказати

// пункт 2увімкнення зовнішніх файлів

#include

/* перед компіляцією, препроцесор компілятора вставить замість цього рядка вміст (текст) заголовного файлу"хидера" mega16.h - цей файл містить перелік регістрів наявних у МК ATmega16 та відповідність їх назв їх фізичним адресам у МК. Слід зазначити, який МК ви використовуєте у властивостях проекту в компіляторі */

#include
/* перед компіляцією, препроцесор компілятора вставить замість цього рядка текст "хидера" delay.h - цей файл містить функції створення пауз у програмі. Тепер щоб зробити паузу вам потрібно лише написати: */

/* Зробити паузу N (число) мікросек. Це має бути константа - НЕ змінна!
наприклад:

delay_us (12 + 7 * 3);
delay_us(117);

delay_ms(x); /* зробити паузу x миліСік
x - може бути змінна, вираз чи число
від 0 до 65535 (тип unsigned int)
наприклад:

delay_ms(3280);
delay_ms(змінна);
delay_ms (змінна * 4 + 760); */

//пункт 3визначення користувача

#define ADC_BUSY PINB.0
#define NCONVST PORTB.1
/* після цих двох рядків, перед компіляцією, препроцесор компілятора замінить у тексті програми ADC_BUSY на PINB.0 та NCONVST на PORTB.1
Таким чином замість того щоб пам'ятати що висновок зайнятості AD7896 підключений у вас до ніжки PB0 ви можете перевіряти значення осмисленого поняття ADC_BUSY - "АЦП зайнятий" . А замість керування абстрактною ніжкою PB1 (через PORTB.1) ви можете керувати – NCONVST – "стартувати нове АЦ перетворення".

#define – Це зручно! Але ЗОВСЄ не обов'язково.
*/

Наприклад:

#define invbit(p,n) (p=p^bit(n))

Тут змінні величини це "p" та "n". Тепер для інвертування біта 5 у регістрі PORTBвам достатньо написати у програмі:

invbit( PORTB,5);

Крім того, у самій правій частині ці змінні величини можуть бути пов'язані і арифметичними операціями і таких змінних може бути багато.

Алгоритм

Розробка будь-якої програми починається із розробки алгоритму. У нашому випадку алгоритм такий: після операцій початкового налаштування мікроконтролер повинен увійти в безперервний цикл, у процесі якого він повинен опитувати вхід, підключений до нашої кнопки, і в залежності від її стану керувати світлодіодами. Опишемо це докладніше.

Програма мовою Сі

Під час створення програми на мові С ми використовуємо компілятор C PRO for AVR. Це програмне середовище спеціально призначене для розробки програм мовою С для мікроконтролерів AVR.

Будь-яке сучасне середовище програмування працює не просто з текстом програми, а з так званим проектом.

Завдання програміста лише написати текст програми, котрій у проекті відводиться окремий файл із розширенням “с”. Компілятор переводить вихідну програму в шістнадцяткову систему (створює Hex - файл) для занесення (прошивки) в пам'ять мікроконтролера.

Надалі ми ще розглянемо докладно процес встановлення та роботу з програмним середовищем C PRO for AVR. Зараз же вважаємо, що вона встановлена ​​та запущена.

Відразу після запуску компілятора всі параметри набирають значення за замовчуванням (всі внутрішні пристрої вимкнені, внутрішні порти введення-виведення налаштовані на введення, використовується внутрішній генератор з частотою тактування 4МГц). Це відповідає початковому стану мікропроцесора після системного скидання. Ті параметри, які нам не потрібні чіпати, поки не будемо (залишимо за замовчуванням).

Програма мовою Сі виглядає так:

1 #Include< Atmega 128.h >

2 Bit oldstate ; //прапор старого стану

3 Void main () (

4 DDB0 bit = 0; // Установка виведення РВ0 як вхід

5 DDRC = 0xFF; // Конфігурування РС як висновок

6 PORTC=0xAA; // у порт З записується вихідний код

9 If (Button (& PINB,0,1,1)) ( // Виявлення логічної одиниці

10 Oldstate = 1; // оновлення прапора

11 if (oldstate && Button (& PINB, 0,1,0)) ( // Виявлення переходу з 1в 0

12 PORTB = ~ PORTB; //інвертування PORTC

13 oldstate=0; // оновлення прапора

14) While (1); // Нескінченний цикл

Функції засобів налагодження

Терміни та якість налагодження системи залежать від засобів налагодження. Чим досконаліше прилади, що є у розпорядженні інженера-розробника, тим швидше можна почати налагодження апаратури та програм і тим швидше виявити помилки, локалізувати джерела, усунення яких обійдеться дорожче на пізнішому етапі проектування.

Засоби налагодження повинні:

1) управляти поведінкою системи або її моделі на різних рівнях абстрактного уявлення;

2) збирати інформацію про поведінку системи або її моделі, обробляти та подавати на різних рівнях абстракції;

3) перетворювати системи, надавати їм властивості контролепридатності;

4) моделювати поведінку довкілля проектованої системи.

Під керуванням поведінкою системи або її моделі розуміються визначення та подача вхідних впливів для запуску або зупинки системи або її моделі, для переведення в конкретний стан останніх. Щоб визначити місце суб'єктивної несправності, яка може бути внесена на будь-якій стадії проектування, необхідно вміти збирати інформацію про поведінку системи та подавати її у тих формах, які прийняті для цього проекту. Наприклад, це можуть бути тимчасові діаграми, важливі електричні схеми, мова регістрових передач, асемблер та ін.

У випадку не можна локалізувати джерело помилки проектованої системи, маючи інформацію про поведінку системи лише з її зовнішніх висновках, тому проектовану систему перетворюють. Наприклад, перш ніж виготовляти однокристальну мікроЕОМ з тими чи іншими "зашивками" ПЗП, програми налагоджують на емуляційному кристалі, у якого магістраль виведена на зовнішні контакти і замість ПЗП встановлено ОЗУ.

Мікропроцесорні системи за своєю складністю, вимогами та функціями можуть значно відрізнятися надійними параметрами, обсягом програмних засобів, бути однопроцесорними та багатопроцесорними, побудованими на одному типі мікропроцесорного набору або кількох, і т.д. У зв'язку з цим процес проектування може змінюватись в залежності від вимог, що пред'являються до систем. Наприклад, процес проектування МПС, що відрізняються одна від одної змістом ПЗУ, складатиметься з розробки програм та виготовлення ПЗУ.

При проектуванні багатопроцесорних мікропроцесорних систем, що містять кілька типів мікропроцесорних наборів, необхідно вирішувати питання організації пам'яті, взаємодії з процесорами, організації обміну між пристроями системи та зовнішнім середовищем, узгодження функціонування пристроїв, що мають різну швидкість роботи, і т. д. Нижче наведено зразкову послідовність етапів , Типові для створення мікропроцесорної системи:



1. Формалізація вимог до системи.

2. Розробка структури та архітектури системи.

3. Розробка та виготовлення апаратних засобів та програмного забезпечення системи.

4. Комплексне налагодження та приймальні випробування.

Етап 1. На цьому етапі складаються зовнішні специфікації, перераховуються функції системи, формується технічне завдання (ТЗ) на систему, формально викладаються задуми розробника в офіційній документації.

Етап 2. На даному етапі визначаються функції окремих пристроїв та програмних засобів, вибираються мікропроцесорні набори, на базі яких буде реалізована система, визначаються взаємодія між апаратними та програмними засобами, часові характеристики окремих пристроїв та програм.

Етап 3. Після визначення функцій, що реалізуються апаратурою, та функцій, що реалізуються програмами, схемотехніки та програмісти одночасно приступають до розробки та виготовлення відповідно дослідного зразка та програмних засобів. Розробка та виготовлення апаратури складаються з розробки структурних та принципових схем, виготовлення прототипу, автономного налагодження.
Розробка програм складається із розробки алгоритмів; написання тексту вихідних програм; трансляції вихідних програм до об'єктних програм; автономного налагодження.

Етап 4. див. Комплексне налагодження.

На кожному етапі проектування МПС людьми можуть бути внесені несправності та прийняті неправильні проектні рішення. Крім того, у апаратурі можуть виникнути дефекти.

Якісні та кількісні зміни елементної бази засобів ВТ призвели до

зміни сформованих принципів їх проектування (таких, як жорстка

структура, послідовне центральне управління, лінійна організація

пам'яті та відсутність можливості адаптації структури ЕОМ до особливостей

розв'язуваної задачі).

На зміну класичним фоннейманівським принципам організації обчислювальних систем прийшли ідеї проблемної орієнтації МПС, паралельної та конвеєрної обробки інформації, використання табличних методів обробки даних, принципи регулярності та однорідності структур МПС; стає реальною

можливістю ідея створення адаптивно-перебудовуваних систем, а також

апаратна реалізація функцій програмного забезпечення Тому в даний час

час під час проектування обчислювальних систем на основі МПС отримав

застосування так званий принцип «3М»: модульність, магістральність,

мікропрограмність.

Принцип модульної організаціїпередбачає побудову обчислювальних та

керуючих МПС на основі набору модулів: конструктивно, функціонально та

електрично закінчених обчислювальних пристроїв, що дозволяють самостійно

або разом з іншими модулями вирішувати завдання цього класу. Модульний

підхід при проектуванні мікроЕОМ та систем дозволяє (при реалізації як

універсальних, так і спеціалізованих модулів) забезпечити створення сімейств

(рядів) МПС, що відрізняються функціональними можливостями та характеристиками,

що перекривають значний діапазон застосувань, сприяє скороченню

витрат на проектування, а також спрощує нарощування потужності та

реконфігурацію систем, що відсуває час морального старіння обчислювальних

Магістральний спосіб обміну інформацієюна відміну способу організації

довільних зв'язків (за принципом «кожен з кожним») дозволяє впорядкувати та

мінімізувати кількість зв'язків у МПС. Він забезпечує обмін інформацією між

функціональними та конструктивними модулями різного рівня за допомогою

магістралей, що поєднують вхідні та вихідні шини. Розрізняють одно-, дво-,

три- та багатомагістральні зв'язки. Необхідно відзначити взаємозв'язок

схемотехнічних та структурних рішень, що виявляються при реалізації

даного способу обміну у вигляді створення спеціальних двонаправлених буферних

каскадів з трьома стійкими станами та використання тимчасового

мультиплексування каналів обміну.

Мікропрограмне управліннязабезпечує найбільшу гнучкість при організації

багатофункціональних модулів та дозволяє здійснити проблемну орієнтацію

МПС, а також використовувати в них макрооперації, що ефективніше за використання


стандартних підпрограм. Крім цього, передача керованих слів у вигляді

зашифрованих кодових послідовностей відповідає умовам мінімізації

числа висновків НВІС та скорочення числа міжз'єднань у модулях.

Крім перерахованих вище основних особливостей проектування МПС, слідує

відзначити принцип регулярності, який передбачає закономірну

повторюваність елементів структури МПС та зв'язків між ними. Застосування цього

принципу дозволяє збільшити інтегральну щільність, зменшити довжину зв'язків

на кристалі, скоротити час топологічного та схемотехнічного

проектування БІС та НВІС, зменшити кількість перетинів та типів функціональних

та конструктивних елементів.

При розробці архітектури МПС (системний етап) необхідно вирішити такі

Дати опис концептуальної структури функціональної поведінки системи з

позицій обліку інтересів користувача при її побудові та організації

обчислювального процесу у ній;

Визначити структуру, номенклатуру та особливості побудови програмних та

мікропрограмних засобів;

Описати характеристики внутрішньої організації потоків даних та керуючої

інформації;

Провести аналіз функціональної структури та особливості фізичної

реалізації пристроїв системи з позиції збалансованості програмних,

мікропрограмних та апаратурних засобів.

Основні етапи проектування МПС наведено на рис. 3.1.

На початковій стадії проектування МПС може бути описана на одному з

наступних концептуальних рівнів: “чорна скринька”, структурна, програмна,

логічний, схемний.

На рівні “чорної скриньки” МПС описується зовнішніми специфікаціями, де

перераховуються зовнішні властивості.

Мал. 3.1. Етапи проектування МПС

Структурний рівень створюється апаратними компонентами МПС, яка

описується функціями окремих пристроїв, їх взаємозв'язком та інформаційними

потоками.

Програмний рівень поділяється на два підрівні (команд процесора та

мовний) та МПС інтерпретується як послідовність операторів або

команд, які викликають ту чи іншу дію над деякою структурою даних.

Логічний рівень властивий виключно дискретним системам і поділяється на

два підрівні: перемикачових схем та регістрових пересилок.

Перший підрівень утворюється вентилями (комбінаційні схеми та елементи пам'яті) та побудованими на їх основі операторами обробки даних. Другий підрівень характеризується більш високим ступенем абстрагування і є описом регістрів і передачу даних між ними. Він включає в себе дві

частини: інформаційну та керуючу: перша утворюється регістрами,

операторами та шляхами передачі даних, друга забезпечує залежні від

часу сигнали, що ініціюють пересилання даних між регістрами.

Схемний рівень полягає в описі роботи елементів дискретних устройств.

У життєвому циклі МПС, як і будь-якої дискретної системи, виділяються три стадії:

проектування, виготовлення та експлуатація.

Кожна із стадій підрозділяється на кілька фаз, для яких існують ймовірності виникнення конструктивних чи фізичних несправностей. Несправності класифікують відповідно до їхніх причин: фізична, якщо причиною її є дефекти елементів, і суб'єктивна, якщо її причиною є помилки проектування.

Суб'єктивні несправності ділять на проектні та інтерактивні. Проектні

несправності викликані недоліками, що вносяться до системи на різних стадіях

реалізації вихідного завдання. Інтерактивні несправності виникають у

процесі роботи з вини обслуговуючого персоналу (оператора) Результатом

прояви несправності є помилка, причому одна несправність може

служити причиною цілого ряду помилок, а та сама помилка може бути викликана

безліччю несправностей.

Існує також поняття дефекту – фізична зміна параметрів

компонентів системи, що виходять за допустимі межі Дефекти називають

збоями, якщо вони мають тимчасовий характер, і відмовими, якщо вони постійні.

Дефект не може бути виявлений доти, доки не будуть створені умови для

виникнення через нього несправності, результат якої має бути, у свою

чергу, передано на вихід об'єкта, що досліджується, для того, щоб зробити

несправність спостережуваної.

Діагностика несправності - процес визначення причини появи помилки по

результати тестування.

Налагодження – процес виявлення помилок та визначення

джерел їх появи за результатами тестування під час проектування МПС.

Засобами налагодження є прилади, комплекси та програми. Іноді під

налагодженням розуміють виявлення, локалізацію та усунення несправності. Успіх

налагодження залежить від того, як спроектована система, чи передбачені

властивості, що роблять її зручною для налагодження, а також від засобів, що використовуються

для налагодження.

Для проведення налагодження проектована МПС повинна мати

властивостями керованості, спостережуваності та передбачуваності.

Керованість –властивість системи, у якому її поведінка піддається

управлінню, тобто. є можливість зупинити функціонування системи в

певному стані та заново запустити систему.

Спостережуваність- Властивість системи, що дозволяє простежити за поведінкою

системи за зміною її внутрішніх станів.

Передбачуваність- властивість системи, що дозволяє встановити систему в

стан, з якого всі наступні стани можуть бути передбачуваними.

МПС за своєю складністю, вимогами та функціями можуть значно відрізнятися.

експлуатаційними параметрами, обсягом програмних засобів, типом

мікропроцесорного набору і т.д. У зв'язку з цим процес проектування може

видозмінюватися в залежності від вимог, які пред'являються до системи.

Процес проектування – ітераційний процес. Несправності, виявлені на етапі приймальних випробувань, можуть призвести до корекції специфікації, а

отже, до початку проектування всієї системи. Виявляти

несправності необхідно якомога раніше; для цього треба контролювати

коректність проекту кожному етапі розробки. Існують такі методи

контролю правильності проектування: верифікація (формальні методи

докази коректності проекту); моделювання; Тестування.

Останнім часом з'явилося багато робіт з верифікації програмного забезпечення.

забезпечення, мікропрограм, апаратури. Однак ці роботи поки що носять

теоретичний характер. Тому на практиці частіше використовують моделювання

поведінки об'єкта та тестування на різних рівнях абстрактного

уявлення системи.

На етапі формалізації вимог до системи контроль за коректністю проекту

особливо необхідний, оскільки багато цілей проектування не формалізуються або

неможливо знайти формалізовані у принципі. Функціональна специфікація може

аналізуватися колективом експертів або моделюватися та перевірятись у

дослідному порядку виявлення досягнення бажаних цілей. Після затвердження

функціональної специфікації починається розробка тестових програм,

призначених для встановлення правильності роботи системи відповідно до

її специфікацією. В ідеальному випадку розробляються тести, цілком

засновані на цій специфікації та дають можливість перевірки будь-якої

реалізації системи, яка оголошується здатною виконувати функції,

обумовлені у специфікації. Цей спосіб – повна протилежність іншим,

де тести будуються стосовно конкретних реалізацій. Однак на практиці

розробці тестів часто надають нижчий пріоритет у порівнянні з

проектом, тому тестові програми з'являються значно пізніше за нього

Процеси автоматизації технічного устаткування захопили більшість всієї організації виробництва. Вони застосовуються повсюдно у верстатах, машинах та механізмах, робототехнічних комплексах. Нові технології суттєво підвищують продуктивність праці, зменшуючи вплив людського фактора на ризики під час виробництва. Також підвищується технічний рівень та якість продукції. Мікропроцесорні системи – свого часу була інноваційною технологією. Але зараз це вже буденність, адже прилади, які виконані із застосуванням мікропроцесорів, мають більш високі показники у роботі порівняно з приладами, виконаними на окремих логічних схемах, за економічної вигоди перших.

Стандартизація процесу розробки спрощує аналіз та дослідження у цій сфері. А також робить наочним поточний стан та можливий результат. Сучасні компанії, що займаються розробкою вбудованих мікропроцесорних систем використовують програмовані логічні інтегральні схеми (ПЛІС) та системи автоматизованого виробництва для швидкого та організованого проектування. За допомогою ПЛІС можливе також налагодження та тестування в режимі реального часу. Щорічне оновлення САПР дозволяє все менше і менше витрачати час на монотонну та односкладову роботу, при цьому не допускаючи очевидних помилок. Це дозволяє абстрагуватися на більш високі рівні системи та вирішення важких завдань.

Процес розробки вбудованих мікропроцесорних систем можна як двох маршрутів послідовних етапів проектування. Перший маршрут - розробка апаратної частини мікропроцесорної системи, що вбудовується. Другий маршрут – проектування програмних засобів (рис.1).

Малюнок 1. Етапи проектування

Але не всі щаблі маршруту обов'язкові. Моделювання апаратної частини системи у процесі розробки може проводитися. Тому можна виключити деякі щаблі: підготовка специфікації моделювання, генерація моделей, функціонального та тимчасового моделювання. При цьому слід враховувати, що моделювання апаратної частини системи підвищує ефективність процесу проектування загалом за рахунок більш раннього виявлення можливих помилок та їх усунення.

Типові етапи проектування мікропроцесорних систем включають:

  1. Формалізація різноманітних вимог до системи. Необхідно скласти зовнішні специфікації, технічне завдання (ТЗ) на систему, нотатки образу системи розробником у документації, перераховуються функції системи.
  2. Розробка структури та архітектури елементів системи. Необхідно визначити взаємодію між апаратними та програмними засобами, функції периферії та програмних оболонок, вибрати мікропроцесорні рішення, на базі яких буде реалізована система, визначити тимчасові характеристики.
  3. Розробка та виготовлення апаратної частини та програмного забезпечення системи. Необхідно розробити структуру та принципові схеми, виготовити прототип, налагодити в умовах базових режимів роботи. Розробка програмного забезпечення повинна складатися з алгоритмів, написання тексту вихідних програм, трансляції вихідних програм в об'єктні програми, налагодження програм і симуляції.
  4. Загальне налагодження та приймальні випробування в робочих умовах.

Людський фактор допускає несправності та прийняття невірних проектних рішень. Також є апаратурні дефекти в пристроях. Наприклад, можливі такі джерела помилок на етапах:

Етап 1. Логічна неузгодженість вимог, недогляду, неточності алгоритму.

Етап 2. Упущення функцій, упущення деяких інформаційних потоків, неузгодженість протоколу взаємодії апаратури та програм, неправильне визначення технічних вимог, неправильний вибір мікропроцесорних рішень, неточності алгоритмів.

Етап 3. Під час розробки апаратури - упущення деяких функцій, неправильна інтерпретація технічного завдання, недоробки у схемах синхронізації, порушення правил проектування; при розробці програмних засобів - упущення деяких функцій технічного завдання, неточності в алгоритмах, неточності кодування; при виготовленні прототипу - несправності комплектуючих виробів та периферії, несправності монтажу та складання.

Кожне з перелічених джерел помилки може спричинити велику кількість фізичних або суб'єктивних несправностей, які необхідно надалі визначити та усунути. Виявлення та локалізація несправності ускладнюється з кількох причин: по-перше, через несправності може бути кілька; по-друге, одноманітність симптомів різних проблем. Оскільки відсутні моделі суб'єктивних несправностей, це завдання не формалізована. Можливе рішення за допомогою експертних систем – бази даних із вже наявними проблемами та їх вирішенням, що виходить із практичного досвіду.

Суб'єктивні несправності відрізняються від фізичних тим, що після виявлення, локалізації та корекції більше не виникають. Але суб'єктивні несправності можуть бути внесені на етапі розробки специфікації системи, а це означає, що навіть після ретельних випробувань системи на відповідність її специфікаціям в системі можуть бути суб'єктивні несправності.

p align="justify"> Процес проектування - ітераційний процес, а значить при неповному усуненні помилок на одному етапі, можлива їх поява на наступному. Виявляти несправності необхідно якомога раніше, для цього треба контролювати коректність проекту на кожному етапі розробки. Наприклад, несправності, виявлені на кінцевому етапі прийому-здачі проекту, можуть призвести до корекції специфікацій, а отже, до початку проектування всієї системи. До таких же наслідків наводять зміни технічного завдання (через недомовленість та нестачу відомостей про систему).

Основними методами контролю правильності проектування є: верифікація, моделювання та тестування.

Верифікація дозволяє виявляти як поточні помилки, а й потенційні помилки, які можуть виникнути у майбутніх проектах з допомогою блоків. Але вимагає окремого технічного завдання та відповідних навичок і підходить під великі проекти. На невеликих проектах найчастіше використовують моделювання поведінки об'єкта та тестування, т.к. цей варіант економічно вигідний і вимагає великої кількості ресурсів.

Контроль коректності досягається кожному етапі проектування необхідністю проведення моделювання різних рівнях абстракцій системи та перевірки правильності реалізованої частини моделі шляхом тестування. Функціональна специфікація може моделюватися і перевірятися у дослідному порядку виявлення очікуваного результату. Також може проводитись аналіз колективом експертів. Після затвердження функціональної специфікації починається розробка функціональних тестів системи, призначених встановлення правильності функціонування системи відповідно до її функціональної специфікацією. Найефективніше розробляти тести, цілком засновані на цій специфікації, оскільки це дає можливість перевірки будь-якої реалізації системи, здатної виконувати функції, обумовлені специфікацією. Цей спосіб - аналогічний іншим, де тести будуються стосовно конкретних реалізацій, але точніше проводить зіставлення очікування та результату розробки.

Після виявлення помилки має бути локалізовано її джерело для проведення корекції на відповідному рівні абстрактного подання системи та у відповідному місці. Неправильне визначення джерела помилки або коригування на іншому рівні абстрактного представлення системи призводить до того, що інформація про систему на верхньому рівні стає помилковою і не може бути використана для подальшого налагодження при виробництві та експлуатації системи.

Автоматизація монотонної роботи з розробки тестових програм скорочує період конструювання та налагодження за рахунок більш раннього отримання тестів (оскільки вони можуть бути згенеровані відразу після формування вимог до системи) та дозволяє проектувальнику змінювати специфікації без переписування всіх тестових програм. Насправді розробка тестів менш пріоритетна проти проектом, тому тестові програми з'являються значно пізніше його завершення.

Таким чином, враховуючи нюанси проектування мікропроцесорів, можна легко обійти «підводні камені» при розробці. Використання програмованих логічних інтегральних схем (ПЛІС) полегшує налагодження ще випущеної партії і дозволяє протестувати проект і виправити недоліки. А системи автоматизованого виробництва (САПР) полегшує розробку, дозволяючи перерозподілити ресурси раціональніше.

Список литературы:

  1. СибГУТІ [Електронний ресурс] / Проектування мікропроцесора на ПЛІС - Режим доступу: http://ict.sibsutis.ru/sites/csc.sibsutis.ru/files/courses/mps/mp.pdf-вільний. - Загл. з екрану. - яз. русявий. (Дата звернення 22.12.2017).
  2. Зотов В. Embedded Development Kit - система проектування мікропроцесорних систем, що вбудовуються, на основі ПЛІС серій FPGA фірми Xilinx. 2004. №3.

Основні етапи розробки.МПС на основі МК використовуються найчастіше як вбудовані системи для вирішення завдань управління деяким об'єктом. Важливою особливістю цього є робота у часі, тобто. забезпечення реакцію зовнішні події протягом певного часового інтервалу. Такі пристрої отримали назву контролерів.

Технологія проектування контролерів на базі МК повністю відповідає принципу нерозривного проектування та налагодження апаратнихі програмних засобів, прийнятому в мікропроцесорній техніці Це означає, що перед розробником такого роду МПС стоїть завдання реалізації повного циклу проектування, починаючи від розробкиалгоритму функціонування та закінчуючи комплексними випробуваннями у складі виробу, а, можливо, і супроводом під час виробництва. Методологія проектування контролерів, що склалася до цього часу, може бути представлена ​​так, як показано на Рисунок 6.1.

Рисунок 6.1 – Основні етапи розробки контролера

У технічному завданні формулюються вимоги до контролера з погляду реалізації певної функції управління. Технічне завдання включає набір вимог, який визначає, що користувач хоче від контролера і що прилад, що розробляється, повинен робити. Технічне завдання може мати вигляд текстового опису, не вільного у випадку від внутрішніх протиріч.

На підставі вимог користувача складається функціональна специфікація, яка визначає функції, що виконуються контролером для користувача після завершення проектування, уточнюючи тим самим, наскільки пристрій відповідає вимогам, що висуваються. Вона включає описи форматів даних, як на вході, так і на виході, а також зовнішні умови, що управляють діями контролера.

Функціональна специфікація та вимоги користувача є критеріями оцінки функціонування контролера після завершення проектування. Може знадобитися кілька ітерацій, що включають обговорення вимог і функціональної специфікації з потенційними користувачами контролера, і відповідну корекцію вимог і специфікації. Вимоги до типу використовуваного МК формулюються на цьому етапі найчастіше в неявному вигляді.

Етап розробкиалгоритм управління є найбільш відповідальним, оскільки помилки даного етапу зазвичай виявляються тільки при випробуваннях закінченого виробу і призводять до необхідності дорогої переробки всього пристрою. Розробкаалгоритму зазвичай зводиться до вибору одного з кількох можливих варіантів алгоритмів, що відрізняються співвідношенням обсягу програмного забезпечення та апаратних засобів.

При цьому необхідно виходити з того, що максимальне використання апаратних засобівспрощує розробкуі забезпечує високу швидкодію контролера в цілому, але супроводжується, як правило, збільшенням вартості та споживаної потужності. Пов'язано це з тим, що збільшення частки апаратних засобівдосягається або шляхом вибору складнішого МК, або шляхом використання спеціалізованих інтерфейсних схем. І те, й інше призводить до зростання вартості та енергоспоживання. Збільшення частки програмного забезпечення дозволяє скоротити кількість елементів контролера і вартість апаратних засобів, але це призводить до зниження швидкодії, збільшення необхідного обсягу внутрішньої пам'яті МК, збільшення термінів розробкиі налагодженняпрограмне забезпечення. Критерієм вибору тут і надалі є можливість максимальної реалізації заданих функцій програмними засобамипри мінімальних апаратних витратах та за умови забезпечення заданих показників швидкодії та надійності у повному діапазоні умов експлуатації. Найчастіше визначальними вимогами є можливість захисту інформації (програмного коду) контролера, необхідність забезпечення максимальної тривалості роботи в автономному режимі та інші. В результаті виконання цього етапу остаточно формулюються вимоги до параметрів МК, що використовується.

При виборі типу МК враховуються такі основні характеристики:

  • - Розрядність;
  • - Швидкодія;
  • - Набір команд та способів адресації;
  • - вимоги до джерела живлення та споживана потужність у різних режимах;
  • - обсяг ПЗП програм та ОЗУ даних;
  • - Можливості розширення пам'яті програм та даних;
  • - наявність та можливості периферійних пристроїв, включаючи засоби підтримки роботи в реальному часі (таймери, процесори подій тощо);
  • - Можливість перепрограмування у складі пристрою;
  • - наявність та надійність засобів захисту внутрішньої інформації;
  • - можливість постачання різних варіантах конструктивного виконання;
  • - Ціна в різних варіантах виконання;
  • - Наявність повної документації;
  • - наявність та доступність ефективних засобів програмування та налагодженняМК;
  • - кількість та доступність каналів поставки, можливість заміни виробами інших фірм.

Список цей не є вичерпним, оскільки специфіка пристрою, що проектується, може перенести акцент вимог на інші параметри МК. Визначальними можуть бути, наприклад, вимоги до точності внутрішнього компаратора напруг або наявність великої кількості вихідних каналів ШІМ.

Номенклатура МК обчислюється тисячами типів виробів різних фірм. Сучасна стратегія модульного проектування забезпечує споживача різноманітністю моделей МК з тим самим процесорним ядром. Така структурна різноманітність відкриває перед розробником можливість вибору оптимального МК, що не має функціональної надмірності, що мінімізує вартість комплектуючих елементів.

Однак для реалізації на практиці можливості вибору оптимального МК необхідна досить глибоке опрацювання алгоритму управління, оцінка обсягу програми, що виконується, і числа ліній сполучення з об'єктом на етапі вибору МК. Допущені на даному етапі прорахунки можуть згодом призвести до зміни моделі МК і повторного розведення друкованої плати макета контролера. У таких умовах доцільно виконувати попереднє моделювання основних елементів прикладної програми з використанням програмно-логічної моделі обраного МК.

За відсутності МК, що забезпечує необхідні за ТЗ характеристики проектованого контролера, необхідне повернення до етапу розробкиалгоритму управління та перегляд вибраного співвідношення між обсягом програмного забезпечення та апаратних засобів. Відсутність відповідного МК найчастіше означає, що з реалізації необхідного обсягу обчислень (алгоритмів управління) за відведений час потрібна додаткова апаратна підтримка. Негативний результат пошуку МК з необхідними характеристиками може бути пов'язаний з необхідністю обслуговування великої кількості об'єктів управління. І тут можливе використання зовнішніх схем обрамлення МК.

На етапі розробкиструктури контролера остаточно визначається склад наявних та підлягаючих розробціапаратні модулі, протоколи обміну між модулями, типи роз'ємів. Виконується попереднє опрацювання конструкції контролера. У частині програмного забезпечення визначаються склад та зв'язки програмних модулів, мова програмування. На цьому ж етапі здійснюється вибір засобів проектування та налагодження.

Можливість перерозподілу функцій між апаратнимиі програмними засобамицьому етапі існує, але вона обмежена характеристиками вже обраного МК. При цьому необхідно мати на увазі, що сучасні МК випускаються, як правило, серіями (родинами) контролерів, сумісних програмно і конструктивно, але за своїми можливостями (обсяг пам'яті, набір периферійних пристроїв і т.д.). Це дає можливість вибору структури контролера з метою пошуку оптимального варіанта реалізації.

Не можна не згадати тут про нову ідеологію розробкипристроїв з урахуванням МК, запропонованої фірмою «Scenix». Вона заснована на використанні високошвидкісних RISC-мікроконтролерів серії SX із тактовою частотою до 100 МГц. Ці МК мають мінімальний набір вбудованої периферії, а більш складні периферійні модулі емулюються. програмними засобами. Такі модулі програмного забезпечення називаються «віртуальними периферійними пристроями», вони забезпечують зменшення кількості елементів контролера, часу розробкизбільшують гнучкість виконання. Наразі розроблені цілі бібліотеки віртуальних пристроїв, що містять налагоджені програмні модулі таких пристроїв як модулі ШІМ та ФАПЧ, послідовні інтерфейси, генератори та вимірювачі частоти, контролери переривань та багато інших.