Genel olarak, 8 ila 16 ila 32 bit mikrodenetleyicilere gitmek, özellikle bellek ve aritmetik ve mantıksal işlemleri yapmak için kullanılan kayıt genişliğinde daha az kısıtlamaya sahip olacağınız anlamına gelir. 8, 16 ve 32 bitlik takma adlar genellikle hem dahili hem de harici veri yollarının boyutuna ve ayrıca aritmetik ve mantıksal işlemler için kullanılan dahili kayıtların büyüklüğüne (akümülatörler olarak adlandırılan yalnızca bir veya iki tane) karşılık gelir , şimdi genellikle 16 veya 32 kayıt bankaları vardır).
G / Ç bağlantı noktası bağlantı noktası boyutları da genellikle veri yolu boyutunu izler, bu nedenle 8 bitlik bir mikro 8 bit bağlantı noktasına, 16 bitlik 16 bit bağlantı noktasına vb.
8 bitlik bir veri yoluna sahip olmasına rağmen, birçok 8 bitlik mikro denetleyicinin 16 bitlik bir adres veriyolu vardır ve 2 ^ 16 veya 64K bayt belleğe hitap edebilir (bu, uygulamanın yakınında herhangi bir yere sahip oldukları anlamına gelmez). Ancak, düşük uçlu PIC'ler gibi bazı 8 bitlik mikrolar sadece çok sınırlı bir RAM alanına sahip olabilir (örneğin bir PIC16'da 96 bayt).
Sınırlı adresleme şemasını aşmak için, bazı 8 bitlik mikro veriler disk belleği kullanır, burada sayfa kaydının içeriği kullanılacak birkaç bellek kümesinden birini belirler. Sayfa kaydı ne şekilde ayarlanırsa ayarlansın genellikle bazı yaygın RAM kullanılabilir.
16-bit mikrodenetleyici genellikle 64K bellekle sınırlıdır, ancak bu sorunu gidermek için sayfalama tekniklerini de kullanabilir. 32-bit mikrodenetleyicilerin elbette böyle bir kısıtlaması yoktur ve 4GB'a kadar belleği ele alabilir.
Farklı bellek boyutları ile birlikte yığın boyutu. Alt uç mikrolarda bu, özel bir bellek alanına uygulanabilir ve çok küçük olabilir (birçok PIC16'nın 8 seviyeli derin çağrı yığını vardır). 16-bit ve 32-bit mikrolarda, yığın genellikle genel RAM'de olacak ve sadece RAM'in boyutu ile sınırlı olacaktır.
Çeşitli cihazlarda uygulanan bellek miktarı - hem program hem de RAM - arasında büyük farklılıklar vardır. 8-bit mikrolar sadece birkaç yüz bayt RAM ve birkaç bin bayt program belleğine sahip olabilir (veya çok daha azı - örneğin PIC10F320 sadece 256 adet 14 bit flash ve 64 bayt RAM'e sahiptir). 16-bit mikronlarda birkaç bin bayt RAM ve on bin bayt program belleği olabilir. 32 bit mikronlar genellikle 64K baytın üzerinde RAM'e ve belki de 1/2 MB veya daha fazla program belleğine sahiptir (PIC32MZ2048, 2 MB flash ve 512KB RAM'e sahiptir; Yeni çıkan PIC32MZ2064DAH176, grafikler için optimize edilmiş 2 MB flash ve 32MB'lık çipli RAM).
Montaj dilinde programlama yapıyorsanız, kayıt boyutu sınırlamaları çok belirgindir, örneğin iki adet 32 bit sayı eklemek 8 bitlik bir mikrodenetleyici için bir iştir, ancak 32 bitlik bir değerdir. C dilinde programlama yapıyorsanız, bu büyük ölçüde şeffaf olacaktır, ancak elbette altta yatan derlenmiş kod 8 acı için çok daha büyük olacaktır.
Büyük ölçüde şeffaf dedim, çünkü çeşitli C veri tiplerinin boyutu bir boyut mikrodan diğerine farklı olabilir; örneğin, 8 veya 16 bitlik bir mikro hedefleyen bir derleyici, 16 bitlik bir işaretli değişken anlamına gelmek için "int" kullanabilir ve 32 bitlik bir mikroda bu 32 bitlik bir değişken olabilir. Bu nedenle, birçok program işaretsiz bir 16 bit değişken için "UINT16" gibi istenen boyutun ne olduğunu açıkça belirtmek için #defines kullanır.
C dilinde programlama yapıyorsanız, en büyük etki değişkenlerinizin boyutu olacaktır. Örneğin, bir değişkenin her zaman 256'dan az olacağını (veya imzalanmışsa -128 ila 127 aralığında) olduğunu biliyorsanız, 8 bitlik bir mikroda (örn. PIC16) 8 bitlik (işaretsiz karakter veya karakter) kullanmalısınız. ) daha büyük bir boyut kullanmak çok verimsiz olacağından. Benzer şekilde 16 bitlik bir mikroda 16 bitlik değişkenler (örn. PIC24). 32 bit mikro (PIC32) kullanıyorsanız, MIPS komut kümesinde bayt, sözcük ve çift sözcük yönergeleri olduğu için gerçekten bir fark yaratmaz. Bununla birlikte, bazı 32 bitlik mikrolarda, bu tür talimatlardan yoksunlarsa, 8 bitlik bir değişkenin manipüle edilmesi, maskeleme nedeniyle 32 bitlik bir modülden daha az verimli olabilir.
Forum üyesi vsz'nin işaret ettiği gibi, varsayılan kayıt boyutundan daha büyük bir değişkene sahip olduğunuz sistemlerde (örneğin 8 bitlik bir mikroda 16 bit değişken) ve bu değişken iki iş parçacığı arasında veya temel iş parçacığı arasında paylaşılır ve bir kesme işleyici, değişken atomik üzerinde herhangi bir işlem (sadece okuma dahil) yapmalıdır, yani bir komut olarak yapılmış gibi görünmelidir. Buna kritik bölüm denir. Bunu azaltmanın standart yolu, kritik bölümü devre dışı bırakma / etkinleştirme kesme çiftiyle çevrelemektir.
32-bit sistemlerden 16-bit veya 16-bit-8-bit olmak üzere, bu tip değişkenler üzerinde artık varsayılan kayıt boyutundan daha büyük olan (ancak daha önce olmayan) herhangi bir işlemin kritik kabul edilmesi gerekir. Bölüm.
Bir PIC işlemciden diğerine giden bir diğer ana fark, çevre birimlerinin işlenmesidir. Bunun kelime boyutu ile ilgisi yoktur ve her çipte ayrılan kaynakların türü ve sayısı ile ilgilidir. Genel olarak, Microchip farklı yongalarda kullanılan aynı çevre biriminin programlanmasını mümkün olduğunca benzer yapmaya çalışmıştır (örneğin timer0), ancak her zaman farklılıklar olacaktır. Çevre kütüphanelerini kullanmak, bu farklılıkları büyük ölçüde gizleyecektir. Son fark, kesintilerin ele alınmasıdır. Yine burada Mikroçip kütüphanelerinden yardım var.