Vraag:
Programmeerverschillen tussen een microcontroller en een microprocessor?
user3073
2011-03-11 00:25:50 UTC
view on stackexchange narkive permalink

Dus ik zie vaak boeken / tutorials en referenties bij het programmeren in assemblage naar een microprocessor ..... dan zie ik dat sommigen ernaar verwijzen als een microcontroller.

Bijvoorbeeld de Atmel ATtiny2313 ... . ik heb een aantal tutorials gezien, sommigen noemen het een microprocessor, sommigen noemen het een microcontroller?

Wat is het? en is het programmeren ervan (in wezen) hetzelfde? (in montage)

mogelijk duplicaat van [Wat is het verschil tussen een microcontroller en een microprocessor?] (http://electronics.stackexchange.com/questions/1092/whats-the-difference-between-a-microcontroller-and-a-microprocessor)
@Kellenjb: Het zou zijn als het niet naar de programmeerverschillen zou vragen. Ik denk dat dit anders genoeg is om niet te sluiten.
@BG100 het geaccepteerde antwoord verklaarde alleen echt het verschil, niet een programmeerverschil.
Zes antwoorden:
BG100
2011-03-11 00:47:00 UTC
view on stackexchange narkive permalink

Dit zijn eigenlijk twee vragen in één ...

Ten eerste, wat is het verschil tussen een microcontroller en een microprocessor?

Microprocessor is puur een CPU die een reeks instructies volgt die worden gelezen vanaf een externe geheugenbus. Het bestuurt externe randapparatuur (zoals scherm, toetsenbord, muis, harde schijf, enz.) Via een externe communicatiebus. Wanneer u een microprocessor programmeert, bevindt uw programma zich buiten het apparaat. In een computer is dit geheugen in eerste instantie het opstart-BIOS ROM dat in eerste instantie het besturingssysteem van de harde schijf in het RAM-geheugen leest en het vervolgens vanaf daar verder uitvoert.

Microcontroller is een beetje als een alles-in-één CPU + geheugen, met enkele externe poorten om te communiceren met de buitenwereld. Het is op zichzelf staand en gebruikt geen extern geheugen om zijn programma vast te houden (hoewel het indien nodig werkgegevens kan lezen en schrijven naar het externe geheugen).

Ten tweede is het programmeren van een microcontroller en een microprocessor hetzelfde ?

In sommige opzichten ja, en in sommige opzichten niet.

Assembly-taal is een brede term die een reeks instructies beschrijft die de CPU direct kan begrijpen. Wanneer je assembleertaal 'compileert', compileert het niet echt iets, het converteert het alleen naar een reeks bytes die de commando's en pluggen in sommige relatieve geheugenlocaties vertegenwoordigen. Dit is gebruikelijk voor zowel microprocessors als microcontrollers.

Verschillende typen CPU begrijpen echter een andere set CPU-instructies. Als je bijvoorbeeld een assembleertaalprogramma schrijft dat werkt met een pic 16F877-microcontroller, zal het complete onzin zijn voor een microprocessor of een andere microcontroller buiten de 16Fxxx-familie van pic-microcontrollers.

Dus hoewel assembly op een vergelijkbare manier werkt voor alle microprocessors en microcontrollers, is de daadwerkelijke lijst met instructies die je schrijft heel anders. Om in assembleertaal te schrijven, moet u een grondige kennis hebben van de architectuur van het apparaat, die u normaal gesproken uit de datasheet kunt halen in het geval van een microcontroller.

Nou, wat ik bedoelde was ja, ASM zal voor iedereen anders zijn ... maar zijn de commando's / etc over het algemeen hetzelfde (of worden ze op dezelfde manier gedaan) tussen een MC en een MP ... Ik bedoel een MC heeft een MP dus ik zou het aannemen ... (minus de herinnering)
@Sauron: Nee, niet echt .. hoewel sommige commando's vergelijkbaar kunnen zijn tussen apparaten, zoals add, mov, sub, enz., Zijn ze waarschijnlijk anders geïmplementeerd en kunnen ze niet tussen apparaten worden overgedragen.
Uitstekend antwoord, en een antwoord dat me waarschijnlijk had kunnen helpen toen ik aan mijn microprocessorklas begon.
nou, wat ik bedoelde was ... Zoals aangezien een Microcontroller een CPU erin heeft ... de montage-instructies zijn meer gericht op de werkelijke CPU dan op de componenten eromheen.
@Sauron: Ja, dat klopt.
stevenvh
2011-03-11 00:30:41 UTC
view on stackexchange narkive permalink

Het verschil is dat de microcontroller on-chip geheugen bevat, zoals Flash EEPROM en RAM, en randapparatuur zoals parallelle en seriële I / O. Bij de eerste microprocessors waren dat allemaal externe apparaten. In plaats van de microprocessors van de I / O hadden de adres- en databus naar hun pinnen gebracht.
De manier waarop je code schrijft voor beide is hetzelfde.

Ter illustratie: er zijn architecturen (bijvoorbeeld ARM) waar dezelfde CPU beschikbaar is als microcontroller (met alle code en data geheugen op de chip), als microprocessor (alle code en data geheugen extern ), of als hybride (wat geheugen op de chip, maar voor de meeste toepassingen voeg je extern geheugen toe). De CPU is hetzelfde, dus de programmering (in de zin van CPU-instructies) is hetzelfde.

Oh ok, dat is logischer, maar de ASM voor elk is in principe hetzelfde?
Je bedoelt dat als ik leer coderen voor Cortex M-serie, ik dan ook voor Cortex A-serie kan coderen ??
In principe ja op beide vragen, de ASM-instructies zijn hetzelfde (hoewel er kleine variaties kunnen zijn, net zoals verschillende ARM-versies specifieke instructies kunnen toevoegen). Maar wanneer u dingen buiten de CPU gebruikt (cache, interruptcontroller, randapparatuur, enz.), Zullen er grote verschillen zijn.
tcrosley
2011-03-11 02:16:03 UTC
view on stackexchange narkive permalink

Hoewel dit meestal een grijs gebied is, is een ander veel voorkomend verschil tussen microcontrollers en microprocessors dat microcontrollers vaak Harvard-architectuur gebruiken (aparte adresruimte voor code en gegevens), terwijl micrprocessors bijna allemaal Von Neumann-architectuur (gecombineerde adresruimte voor code en gegevens).

Voorbeelden van microntroller-families die Harvard-architectuur gebruiken, zijn onder meer: ​​AVR's, Intel 8051, PIC's (behalve PIC32, zie hieronder) en ARM Cortex-M3. Een opmerkelijke uitzondering zijn Freescale-processors, zoals de HCS08, die Von Neumann-architectuur gebruiken, evenals de Parallax Propeller.

Dit beïnvloedt het programmeren op verschillende manieren (onderstaande voorbeelden gebruiken C):

Er kunnen verschillende soorten RAM zijn, elk met hun eigen adresruimte. De 8051 heeft bijvoorbeeld externe data (xdata) die apart van de eerste 256 bytes RAM worden geadresseerd, ook al zijn beide op dezelfde chip geïmplementeerd. Je moet dus kwalificaties gebruiken voor variabelendeclaraties zoals unsigned int xdata foo;

Als constanten in het codegeheugen worden gedeclareerd, moeten ze mogelijk naar RAM worden gekopieerd voordat ze kunnen worden geopend . Of er moet een manier zijn om toegang te krijgen tot het codegeheugen alsof het gegevens zijn - bijv. de codekwalificatie voor 8051s, of PIC's Program Space Visiblity (PSV) -functie.

Deze niet-standaard manieren om toegang te krijgen tot code en RAM zijn meestal het grootste verschil (naast randapparatuur) bij het overzetten van C-code van één chip familie naar een ander.

Je kunt geen code uit RAM uitvoeren in een strikte Harvard-architectuur, dus er kan geen zelfmodificerende code zijn (tenzij je het her-knipperende programmageheugen meteen meetelt). De PIC32 heeft echter een gemodificeerde Harvard-architectuur waarmee code in RAM kan worden uitgevoerd. De Parallax Propeller maakt feitelijk gebruik van zijn mogelijkheid om code te wijzigen om subroutine-retouren uit te voeren, aangezien het geen hardwarestack heeft.

Toybuilder
2011-04-14 18:39:14 UTC
view on stackexchange narkive permalink

Een microcontroller is over het algemeen een oplossing met één chip om reken- en randfuncties te bieden.

Een microprocessor levert de rekenfuncties, maar niet de randfuncties.

Randfuncties kunnen zo simpel zijn als het hebben van een paar bits eenvoudige I / O; of kan geavanceerde tellers en timers, videoweergave, ethernet, motorbesturing, audio- en videocodec, enzovoort bevatten.

Voor een bepaalde architectuur (zeg maar de x86-gebaseerde CPU's en MCU's), de 'computationele' codering zal identiek zijn. Maar hoe u toegang krijgt tot randapparatuur, zal variëren, en dus zult u zeer verschillende hardwarespecifieke codering moeten doen, gebaseerd op hoe de randapparatuurfunctionaliteit is geïmplementeerd op uw doelhardware.

supercat
2013-10-01 20:40:08 UTC
view on stackexchange narkive permalink

Microprocessors worden typisch gebruikt in computers die zijn gemaakt om programma's uit te voeren met een willekeurig, nog nader te bepalen doel. Dergelijke computers zullen doorgaans een door de leverancier geleverde code bevatten waarmee de door de gebruiker geleverde code naar verwachting zal samenwerken. Microcontrollers worden daarentegen meestal gebruikt in machines die uitsluitend zijn gebouwd om één programma uit te voeren. Vaak zal iemand die code schrijft voor een microcontroller elke instructie geven die de machine zal uitvoeren.

Sommige microcontrollers gebruiken dezelfde instructiesets als populaire microprocessors. De 68000-instructieset die werd gebruikt in de originele Macintosh-, Amiga- en Atari ST-lijnen van personal computers, is ook in sommige microcontrollers gebruikt. Hoewel de instructieset die wordt gebruikt door een Macintosh en een 68HC340-gebaseerde besturingskaart hetzelfde is, is de programmering voor de twee platforms meestal erg verschillend. Op de Macintosh is een groot deel van het systeem al "ingesteld" tegen de tijd dat een door de gebruiker geleverd programma wordt gestart. Code die een geheugenblok wil, kan een register laden met de benodigde hoeveelheid en een "A-trap" -instructie uitvoeren. Het Macintosh OS zal dan een aanwijzer terugsturen naar een geheugen dat niet eerder voor een ander doel is toegewezen, en dat geheugengebied markeren zodat het niet opnieuw wordt toegewezen totdat de oorspronkelijke ontvanger het niet langer nodig heeft. Daarentegen is er op een bord met een 68HC340 en 128K RAM geen behoefte of mogelijkheid om RAM te "vragen". Wanneer het programma start, "krijgt" 128K het kan gebruiken zoals het wil; niets anders zal het gebruiken, maar aan de andere kant moet het programma van de gebruiker bijhouden welke gebieden het gebruikt voor welke doeleinden, aangezien niets anders dat zal volgen.

Hoewel het onderscheid hier eigenlijk is tussen een microcomputer versus een microcontroller, en de vraag over microprocessors gaat, wordt dit in de meeste discussies over microprocessorprogrammering besproken in de context van een computer voor algemeen gebruik.

Mike
2017-10-10 00:31:29 UTC
view on stackexchange narkive permalink

Microprocessor: een digitale hardwaremodule die instructies uitvoert.De module kan een volledig geïntegreerd circuit zijn.

Microcontroller: een complete module die naast andere modules een microprocessor met intern geheugen bevat.

Welkom bij EE.SE, Mike.Gebruik x 2 voor alinea-einde.Ik heb het voor je gemaakt.


Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 2.0-licentie waaronder het wordt gedistribueerd.
Loading...