Mikrodenetleyici ve Mikroişlemci Arasındaki Farklar Programlama?


9

Bu yüzden sık sık bir mikroişlemciye montaj programlama sırasında kitap / öğreticiler ve referanslar görüyorum ..... o zaman bazı mikro denetleyici olarak bakın bakın.

Örneğin Atmel ATtiny2313 .... bazı öğreticiler gördüm, bazıları bir mikroişlemci, bazıları mikrodenetleyici diyor?

Hangisi? ve onları (temelde) aynı mı? (montajda)



1
@Kellenjb: Programlama farklılıklarını sormasaydı olurdu. Bence bu kapanmayacak kadar farklı.
BG11

1
@ BG100 kabul edilen cevap bir programlama farkını değil, sadece farkı açıkladı.
Kortuk

Yanıtlar:


14

Bu gerçekten iki soru bir arada ...

İlk olarak, bir mikrodenetleyici ve bir mikroişlemci arasındaki fark nedir?

Mikroişlemci tamamen harici bir bellek veri yolundan okunan bir dizi talimatı takip eden bir CPU'dur. Harici bir çevre yolu (ekran, klavye, fare, sabit sürücü vb.) Harici bir iletişim veri yolu üzerinden kontrol eder. Bir mikroişlemci programladığınızda, programınız aygıtın dışındadır. Bir bilgisayarda, bu bellek başlangıçta işletim sistemini sabit diskten RAM belleğe okuyan ve daha sonra oradan yürütmeye devam eden önyükleme BIOS ROM'udur.

Mikrodenetleyici , dış dünyayla iletişim kurmak için bazı harici bağlantı noktalarına sahip hepsi bir arada CPU + Bellek gibidir. Bağımsızdır ve programını tutmak için harici bellek kullanmaz (gerekirse harici verileri çalışma verilerini okuyabilir ve yazabilir).

İkincisi, bir mikrodenetleyici ve mikroişlemci programlamak aynı mıdır?

Bazı açılardan evet, bazı açılardan hayır.

Montaj dili, CPU'nun doğrudan anlayabileceği bir dizi talimatı tanımlayan geniş bir terimdir. Derleme dilini 'derlediğinizde', gerçekten hiçbir şey derlemez, tüm yaptığı, onu, bazı göreli bellek konumlarındaki komutları ve fişleri temsil eden bir bayt dizisine dönüştürür. Bu hem mikroişlemciler hem de mikrodenetleyiciler için yaygındır.

Ancak, farklı CPU türleri farklı CPU talimatları setini anlar. Örneğin, bir pic 16F877 mikrodenetleyici ile çalışan bir montaj dili programı yazarsanız, 16Fxxx pic mikrodenetleyici ailesi dışında bir mikroişlemciye veya başka bir mikrodenetleyiciye tam anlamıyla saçma olacaktır.

Bu nedenle, montaj tüm mikroişlemciler ve mikrodenetleyicilerde benzer şekilde çalışsa da, yazdığınız talimatların listesi çok farklıdır. Montaj dilinde yazmak için, bir mikrodenetleyici durumunda normalde veri sayfasından alabileceğiniz cihazın mimarisi hakkında derinlemesine bilgi sahibi olmanız gerekir.


Demek istediğim evet oldu ASM her biri için farklı olacak ..... ama komutlar / vb genellikle bir MC ve MP arasında aynı (veya aynı şekilde yapılır) ... Yani bir MC bir MP var bu yüzden varsayalım .. (eksi bellek)

@Sauron: Hayır, gerçekten değil .. add, mov, sub, vb. Gibi bazı komutlar benzer olsa da, muhtemelen farklı şekilde uygulanırlar ve cihazlar arasında bağlantı noktası oluşturmazlar.
BG11

1
Mükemmel yanıt ve bir mikroişlemciler sınıfım başlarken muhtemelen bana yardımcı olabilir.
pfyon

Ne demek istediğimi ...... ...... Bir Mikrodenetleyici içinde bir CPU olduğu gibi ... Montaj talimatları çevresindeki CPU yerine gerçek CPU daha amaçlanmıştır.

@Sauron: Evet, doğru.
BG100

10

Aradaki fark, mikro denetleyicinin Flash EEPROM ve RAM gibi çip üstü bellek ve paralel ve seri I / O gibi çevre birimleri içermesidir. İlk mikroişlemcilerle bunların hepsi harici cihazlardır. G / Ç mikroişlemcileri yerine bir adres ve veri yolu pinlerine getirildi.
Her ikisi için de kod yazma yönteminiz aynıdır.

Bu noktayı göstermek için: aynı CPU'nun mikrodenetleyici (çip üzerindeki tüm kod ve veri belleği ile), mikroişlemci (tüm kod ve veri belleği harici) veya hibrit (bazılarının) olduğu mimariler (örneğin ARM) vardır bellek, ancak çoğu uygulama için harici bellek ekleyeceksiniz). CPU aynıdır, bu nedenle programlama (CPU talimatları anlamında) aynıdır.


Oh tamam bu daha mantıklı, ama her biri için ASM temelde aynı mı?

Cortex M serisi için kod yazmayı öğrenirsem, Cortex A serisi için de kod yazabilir miyim?
0xakhil

Temel olarak her iki soruya da evet, asm talimatları aynıdır (ancak çeşitli ARM sürümlerinin belirli talimatlar ekleyebileceği gibi küçük değişiklikler olabilir). Ancak CPU dışında bir şey kullandığınızda (önbellek, kesme denetleyicisi, çevre birimleri, vb.) Büyük farklılıklar olacaktır.
Wouter van Ooijen

8

Bu gri bir alan olmasına rağmen, mikrodenetleyiciler ve mikroişlemciler arasındaki bir diğer yaygın fark, mikrodenetleyicilerin genellikle Harvard mimarisini (kod ve veri için ayrı adres alanı) kullanırken mikroişlemcilerin neredeyse tamamı Von Neumann mimarisini (kod ve veri için birleşik adres alanı) kullanmasıdır. .

Harvard mimarisini kullanan mikro denetleyici ailelerinin örnekleri şunlardır: AVR'ler, Intel 8051, PIC'ler (PIC32 hariç, aşağıya bakınız) ve ARM Cortex-M3. Dikkate değer bir istisna, Parallax Pervanesi gibi Von Neumann mimarisini kullanan HCS08 gibi Freescale işlemcileridir.

Bu, programlamayı çeşitli şekillerde etkiler (aşağıda gösterilen örnekler C kullanır):

Her biri kendi adres alanına sahip birkaç RAM türü olabilir. Örneğin, 8051'in her ikisi de aynı çip üzerinde uygulanmasına rağmen, ilk 256 bayt RAM'den ayrı olarak adreslenen harici verilere (xdata) sahiptir. Bu nedenle, değişken bildirimlerinde niteleyicileri kullanmak zorundadır.unsigned int xdata foo;

Sabitler kod belleğinde bildirildiyse, erişilebilmeleri için RAM'e kopyalanmaları gerekebilir. Veya, kod belleğine veriymiş gibi erişmenin bir yolu olmalıdır - örn. 8051'ler için kod niteleyicisi veya PIC'nin Program Alanı Görünürlüğü (PSV) özelliği.

Kod ve RAM'e erişmenin bu standart dışı yolları, C kodunu bir yonga ailesinden diğerine taşırken büyük farktır (çevre birimlerinin yanı sıra).

Sıkı bir Harvard mimarisinde RAM'den kod çalıştıramazsınız, bu nedenle kendi kendini değiştiren bir kod olamaz (yeniden yanıp sönen program belleğini anında saymazsanız). Ancak PIC32, kodun RAM'de yürütülmesine izin veren değiştirilmiş bir Harvard mimarisine sahiptir. Parallax Pervanesi, donanım yığını olmadığı için alt rutin dönüşleri gerçekleştirmek için kodu değiştirme yeteneğinden yararlanır.


1

Mikrodenetleyici genellikle hesaplama ve çevresel işlevler sağlayan tek yongalı bir çözümdür.

Mikroişlemci hesaplama işlevlerini sağlar, ancak çevresel işlevleri sağlamaz.

Çevresel işlevler, birkaç bit basit G / Ç'ye sahip olmak kadar basit olabilir; veya karmaşık sayaçlar ve kronometreler, video ekranı, ethernet, motor kontrolü, ses ve video codec'i, vb.

Belirli bir mimari için (örneğin x86 tabanlı CPU'lar ve MCU'lar), "hesaplama" kodlaması aynı olacaktır. Ancak, çevresel işlevlere nasıl erişeceğiniz değişecektir ve bu nedenle, çevresel işlevlerin hedef donanımınıza nasıl uygulandığına bağlı olarak, donanıma özgü çok farklı kodlamaya sahip olursunuz.


1

Mikroişlemciler tipik olarak keyfi ve henüz belirlenemeyen amaçlara yönelik programları çalıştırmak üzere tasarlanmış bilgisayarlarda kullanılır. Bu tür bilgisayarlarda genellikle kullanıcı tarafından sağlanan kodun etkileşime girmesi beklenen bazı satıcı tarafından sağlanan kod bulunur. Buna karşılık mikrodenetleyiciler tipik olarak tek bir program çalıştırmak için üretilen makinelerde kullanılır. Genellikle, bir mikrodenetleyici için kod yazan biri, makinenin uygulayacağı her talimatı sağlar.

Bazı mikro denetleyiciler popüler mikroişlemcilerle aynı komut setlerini kullanır. Orijinal Macintosh, Amiga ve Atari ST kişisel bilgisayar serilerinde kullanılan 68000 komut seti bazı mikrodenetleyicilerde de kullanılmıştır. Macintosh ve 68HC340 tabanlı bir kontrol kartı tarafından kullanılan komut seti aynı olsa da, iki platform için programlama çok farklı olmaya eğilimlidir. Macintosh'ta, kullanıcı tarafından sağlanan bir program çalışmaya başladığında, sistemin çoğu zaten "kurulur". Bir bellek bloğu isteyen kod, gerekli miktarda bir kayıt yükleyebilir ve bir "A-trap" komutu yürütebilir. Macintosh OS daha sonra başka bir amaç için tahsis edilmemiş bir belleğe bir işaretçi döndürecek ve bu bellek alanını ' t Orijinal alıcıya artık ihtiyaç duyulmadığı söylenene kadar yeniden tahsis edilmez. Aksine, 68HC340 ve 128K RAM'e sahip bir kartta RAM için "sormaya" gerek yoktur. Program başladığında 128K "alır" ancak istediği gibi kullanabilir; başka hiçbir şey kullanamaz, ancak kapak tarafında kullanıcının programı hangi alanları hangi amaçlar için kullandığını takip etmek zorundadır, çünkü başka hiçbir şey bunu izleyemez.

Buradaki ayrım gerçekten bir mikrobilgisayar ve mikrodenetleyici arasında olsa da ve soru mikroişlemcilerle ilgili olsa da, mikroişlemci programlama tartışmalarının çoğu bunu genel amaçlı bir bilgisayar bağlamında tartışır.


0

Mikroişlemci: Talimatları yürüten dijital bir donanım modülü. Modül tam bir entegre devre olabilir.

Mikrodenetleyici: Diğer modüllere ek olarak dahili bellekli bir mikroişlemci içeren eksiksiz bir modül.


EE.SE'ye hoş geldiniz, Mike. Paragraf sonu için <enter> x 2 kullanın. Senin için düzelttim.
Transistör
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.