Взагалі, перехід від 8 до 16 до 32 бітових мікроконтролерів означає, що у вас буде менше обмежень на ресурси, зокрема пам’ять та ширину регістрів, які використовуються для виконання арифметичних та логічних операцій. 8, 16 та 32-розрядний монітор загалом позначає як розмір внутрішніх, так і зовнішніх шин даних, а також розмір внутрішнього реєстру (ів), який використовується для арифметичних та логічних операцій (раніше використовувався лише один або два названі акумулятори , зараз зазвичай є регістрові банки 16 або 32).
Розміри портів вводу-виводу також зазвичай відповідають розміру шини даних, тому 8-бітний мікро-порт матиме 8-бітні порти, 16-бітний матиме 16-бітні порти тощо.
Незважаючи на наявність 8-бітової шини даних, багато 8-бітових мікроконтролерів мають 16-бітну шину адреси і можуть адресувати 2 ^ 16 або 64 К байт пам'яті (це не означає, що вони є десь реалізованими). Але деякі 8-бітні мікросередовища, як, наприклад, PIC-телефони низького рівня, можуть мати лише дуже обмежений простір оперативної пам’яті (наприклад, 96 байт на PIC16).
Щоб обійти свою обмежену схему адресації, деякі 8-бітні мікросередовища використовують підказка, де вміст реєстру сторінок визначає один із декількох банків пам'яті. Зазвичай буде доступна загальна оперативна пам’ять незалежно від того, для чого встановлено реєстр сторінок.
16-розрядний мікроконтролер, як правило, обмежений на 64 Кб пам'яті, але також може використовувати методи пейджингу, щоб уникнути цього. 32-розрядні мікроконтролери, звичайно, не мають таких обмежень і можуть містити до 4 Гб пам'яті.
Поряд з різними розмірами пам'яті є розмір стека. У мікросхемах нижнього кінця це може бути реалізовано в спеціальній області пам'яті і бути дуже маленьким (багато PIC16 мають 8-рівневий стек глибоких викликів). У 16-бітних та 32-бітових мікросхемах стек зазвичай буде загальною оперативною пам’яттю і обмежується лише розміром ОЗУ.
Існує також велика різниця в обсязі пам'яті - як програмної, так і оперативної пам'яті - реалізованої на різних пристроях. 8-бітні мікросистеми можуть мати лише кілька сотень байт оперативної пам’яті та кілька тисяч байтів програмної пам’яті (або набагато менше - наприклад, PIC10F320 має лише 256 14-бітових слів флеш-пам'яті та 64 байти оперативної пам’яті). 16-бітні мікросистеми можуть мати кілька тисяч байт оперативної пам’яті та десятки тисяч байтів програмної пам’яті. 32-бітні мікросхеми часто мають понад 64 К байт оперативної пам’яті та, можливо, 1/2 Мбайт або більше програмної пам’яті (PIC32MZ2048 має 2 Мб флеш-пам’яті та 512 КБ оперативної пам’яті; нещодавно випущений PIC32MZ2064DAH176, оптимізований для графіки, має 2 Мб спалаху та колосальні 32 Мб оперативної пам'яті на мікросхемі).
Якщо ви програмуєте на мові складання, обмеження щодо розміру регістру будуть дуже очевидними, наприклад, додавання двох 32-бітових чисел є клопотом на 8-бітовому мікроконтролері, але тривіальним на 32-бітному. Якщо ви програмуєте на C, це буде значною мірою прозоро, але, звичайно, базовий складений код буде набагато більшим для 8-гіркого.
Я сказав, що це значною мірою прозоро, тому що розмір різних типів даних С може відрізнятися від мікро розмірів одного розміру; наприклад, компілятор, націлений на 8 або 16-бітовий мікро, може використовувати "int" для позначення 16-бітної підписаної змінної, а для 32-бітного мікро - це 32-бітова змінна. Так що багато програм використовують #defines, щоб явно сказати, що таке потрібний розмір, наприклад, "UINT16" для 16-бітної змінної без підпису.
Якщо ви програмуєте на C, найбільший вплив матиме розмір змінних вами. Наприклад, якщо ви знаєте, що змінна завжди буде менше 256 (або в діапазоні від -128 до 127, якщо вона підписана), тоді вам слід використовувати 8-бітну (непідписану символу або діаграму) на 8-бітовому мікро (наприклад, PIC16 ), оскільки використання більшого розміру буде дуже неефективним. Аналогічно повторні 16-бітні змінні на 16-бітовому мікро (наприклад, PIC24). Якщо ви використовуєте 32-бітний мікро (PIC32), це насправді не має ніякої різниці, оскільки набір інструкцій MIPS має інструкції байт, слово та подвійні слова. Однак на деяких 32-бітових мікросередовищах, якщо їм відсутні такі інструкції, маніпулювання 8-бітовою змінною може бути менш ефективною, ніж 32-розрядна через маскування.
Як зазначив учасник форуму vsz, у системах, де у вас є змінна величина, що перевищує розмір регістру за замовчуванням (наприклад, 16-бітна змінна на 8-бітовому мікро), і ця змінна поділяється між двома потоками або між базовим потоком і обробник переривання, повинен робити будь-яку операцію (включаючи просто читання) на змінній атомній , тобто, здається, що це робиться як одна інструкція. Це називається критичним розділом. Стандартний спосіб пом'якшити це - оточити критичний ділянку парою відключення / включення переривання.
Таким чином, перехід від 32-бітових систем до 16-бітових або 16-розрядних до 8-розрядних, будь-які операції зі змінними цього типу, які зараз перевищують розмір регістру за замовчуванням (але раніше цього не було), слід вважати критичним розділ.
Ще одна основна відмінність переходу від одного процесора PIC до іншого - це обробка периферійними пристроями. Це менше стосується розміру слова і більше стосується типу та кількості ресурсів, виділених на кожному чіпі. Загалом, Microchip намагався зробити програмування одного і того ж периферійного пристрою, що використовується для різних мікросхем, максимально схожим (наприклад, timer0), але відмінності завжди будуть. Використання їх периферійних бібліотек значною мірою приховає ці відмінності. Остаточна різниця - це обробка переривань. Тут знову є допомога з бібліотек Microchip.