Diferenças de programação entre um microcontrolador e um microprocessador?


9

Então, muitas vezes vejo livros / tutoriais e referências ao programar em montagem para um microprocessador ..... então vejo alguns se referem a ele como um microcontrolador.

Por exemplo, o Atmel ATtiny2313 .... eu vi alguns tutoriais, alguns chamam de microprocessador, outros chamam de microcontrolador?

Qual é? e está programando-os (basicamente) o mesmo? (em montagem)



11
@Kellenjb: Seria se não estivesse perguntando sobre as diferenças de programação. Eu acho que isso é diferente o suficiente para não fechar.
BG100

11
@ BG100 a resposta aceita apenas explicou realmente a diferença, não a diferença de programação.
Kortuk

Respostas:


14

São realmente duas perguntas em uma ...

Em primeiro lugar, qual é a diferença entre um microcontrolador e um microprocessador?

Microprocessador é uma CPU puramente que segue um conjunto de instruções lidas em um barramento de memória externo. Ele controla periféricos externos (como tela, teclado, mouse, disco rígido, etc.) através de um barramento de comunicação externo. Quando você programa um microprocessador, seu programa é externo ao dispositivo. Em um computador, essa memória é inicialmente a ROM do BIOS de inicialização, que inicialmente lê o sistema operacional do disco rígido na memória RAM e continua a executá-lo a partir daí.

O microcontrolador é como uma CPU + Memória all-in-one, com algumas portas externas para se comunicar com o mundo exterior. É independente e não usa memória externa para manter seu programa (embora, se necessário, possa ler e gravar dados de trabalho na memória externa).

Em segundo lugar, a programação de um microcontrolador e microprocessador é a mesma?

De certo modo, sim, e de certo modo, não.

Linguagem assembly é um termo amplo que descreve um conjunto de instruções que a CPU pode entender diretamente. Quando você 'compila' a linguagem assembly, ela realmente não compila nada, tudo o que faz é convertê-la em uma sequência de bytes que representa os comandos e os plugs em alguns locais relativos da memória. Isso é comum a microprocessadores e microcontroladores.

No entanto, diferentes tipos de CPU entendem um conjunto diferente de instruções da CPU. Por exemplo, se você escrever um programa em linguagem assembly que funcione com um microcontrolador pic 16F877, será um absurdo completo para um microprocessador ou qualquer outro microcontrolador fora da família 16Fxxx de microcontroladores pic.

Portanto, embora a montagem funcione de maneira semelhante em todos os microprocessadores e microcontroladores, a lista real de instruções que você escreve é ​​muito diferente. Para escrever em linguagem assembly, você precisa ter um conhecimento profundo da arquitetura do dispositivo, que normalmente pode ser obtido na folha de dados no caso de um microcontrolador.


Bem, o que eu quis dizer foi que sim, o ASM será diferente para cada um ..... mas os comandos / etc geralmente são os mesmos (ou feitos da mesma maneira) entre um MC e um MP ... quero dizer, um MC tem um MP então eu suponho que sim .. (menos a memória)

@ Sauron: Não, na verdade não. Embora alguns comandos possam ser semelhantes entre dispositivos, como add, mov, sub, etc, eles provavelmente são implementados de maneira diferente e não serão portados entre dispositivos.
BG100

11
Excelente resposta, e uma que provavelmente poderia ter me ajudado quando eu estava iniciando minha aula de microprocessadores.
Pfyon

bem, o que eu quis dizer foi ...... Como desde que um microcontrolador tem uma CPU dentro dela ... as instruções de montagem são mais voltadas para a CPU real do que para os componentes ao seu redor.

@Sauron: Sim, está correto.
BG100

10

A diferença é que o microcontrolador inclui memória no chip, como Flash EEPROM e RAM, e periféricos, como E / S paralela e serial. Com os primeiros microprocessadores, esses eram todos dispositivos externos. Em vez dos microprocessadores da E / S, um barramento de endereço e dados foi trazido para seus pinos.
A maneira como você escreve o código para ambos é o mesmo.

Para ilustrar esse ponto: existem arquiteturas (ARM, por exemplo) nas quais a mesma CPU está disponível como microcontrolador (com toda a memória de código e dados no chip), como microprocessador (toda a memória de código e dados externa) ou como híbrido (alguns memória no chip, mas para a maioria dos aplicativos você adiciona memória externa). A CPU é a mesma, portanto a programação (no sentido das instruções da CPU) é a mesma.


Oh ok, isso faz mais sentido, mas o ASM para cada um é basicamente o mesmo?

Quer dizer, se eu aprender a codificar para a série Cortex M, também posso codificar para a série Cortex A ??
0xakhil

Basicamente, sim para as duas perguntas, as instruções asm são as mesmas (embora possam haver pequenas variações, assim como várias versões do ARM podem adicionar instruções específicas). Mas sempre que você estiver usando coisas fora da CPU (cache, controlador de interrupção, periféricos, etc.), haverá grandes diferenças.
Wouter van Ooijen

8

Embora isso tenda a ser uma área cinzenta, outra diferença comum entre microcontroladores e microprocessadores é que os microcontroladores geralmente usam a arquitetura Harvard (espaço de endereço separado para código e dados), enquanto os microprocessadores quase todos usam a arquitetura Von Neumann (espaço de endereço combinado para código e dados) .

Exemplos de famílias de microntroladores que usam a arquitetura Harvard incluem: AVRs, Intel 8051, PICs (exceto PIC32, veja abaixo) e ARM Cortex-M3. Uma exceção notável são os processadores Freescale, como o HCS08, que usa a arquitetura Von Neumann, assim como o Parallax Propeller.

Isso afeta a programação de várias maneiras (os exemplos mostrados abaixo usam C):

Pode haver vários tipos de RAM, cada um com seu próprio espaço de endereço. Por exemplo, o 8051 possui dados externos (xdata), endereçados separadamente dos primeiros 256 bytes de RAM, mesmo que ambos sejam implementados no mesmo chip. Portanto, é necessário usar qualificadores nas declarações de variáveis ​​comounsigned int xdata foo;

Se constantes são declaradas na memória de código, elas podem precisar ser copiadas para a RAM antes de poderem ser acessadas. Ou é necessário que haja uma maneira de acessar a memória de código como se fossem dados - por exemplo, o qualificador de código para 8051s ou o recurso Program Space Visiblity (PSV) da PIC.

Essas maneiras não padrão de acessar o código e a RAM tendem a ser a principal diferença (além dos periféricos) ao transportar o código C de uma família de chips para outra.

Você não pode executar o código da RAM em uma arquitetura estrita de Harvard; portanto, não pode haver código auto-modificável (a menos que você conte novamente a memória do programa em tempo real). No entanto, o PIC32 possui uma arquitetura modificada de Harvard que permite que o código seja executado na RAM. O Parallax Propeller realmente usa sua capacidade de modificar o código para executar retornos de sub-rotina, uma vez que não possui pilha de hardware.


1

Um microcontrolador é geralmente uma solução de chip único para fornecer funções de computação e periféricas.

Um microprocessador fornece as funções de computação, mas não as funções periféricas.

As funções periféricas podem ser tão simples quanto ter alguns bits de E / S simples; ou pode incluir contadores e cronômetros sofisticados, exibição de vídeo, ethernet, controle de motor, codec de áudio e vídeo e cetra.

Para uma determinada arquitetura (por exemplo, CPU e MCU com base em x86), a codificação "computacional" será idêntica. Porém, a maneira como você acessa as funções periféricas variará e, portanto, você terá uma codificação específica de hardware muito diferente, com base em como a funcionalidade periférica é implementada no hardware de destino.


1

Os microprocessadores são normalmente usados ​​em computadores que são construídos para executar programas de finalidade arbitrária ainda a ser determinada. Esses computadores geralmente possuem algum código fornecido pelo fornecedor com o qual se espera que o código fornecido pelo usuário interaja. Os microcontroladores, por outro lado, são normalmente usados ​​em máquinas construídas com o único objetivo de executar um único programa. Freqüentemente, alguém que escreve código para um microcontrolador fornece todas as instruções que a máquina executará.

Alguns microcontroladores usam o mesmo conjunto de instruções que os microprocessadores populares. O conjunto de instruções 68000 usado nas linhas originais de computadores pessoais Macintosh, Amiga e Atari ST também foi usado em alguns microcontroladores. Embora o conjunto de instruções usado por um Macintosh e por uma placa de controle baseada no 68HC340 seja o mesmo, no entanto, a programação para as duas plataformas pode ser muito diferente. No Macintosh, quando um programa fornecido pelo usuário começar a ser executado, grande parte do sistema já estará "configurada". O código que deseja um bloco de memória pode carregar um registrador com a quantidade necessária e executar uma instrução "A-trap". O sistema operacional Macintosh retornará um ponteiro para alguma memória que não tenha sido alocada anteriormente para algum outro objetivo e marcará essa área da memória para que ele ganhe ' ser alocado novamente até ser instruído que o destinatário original não precisa mais dele. Por outro lado, em uma placa com 68HC340 e 128K de RAM, não há necessidade ou capacidade de "pedir" RAM. Quando o programa é iniciado, o "obtém" 128K, ele pode usar como quiser; nada mais vai usá-lo, mas, por outro lado, o programa do usuário precisa acompanhar quais áreas ele está usando para que finalidades, já que nada mais o acompanhará.

Enquanto a distinção aqui é realmente entre um microcomputador versus microcontrolador, e a pergunta é sobre microprocessadores, a maioria das discussões sobre programação de microprocessadores o discute no contexto de um computador de uso geral.


0

Microprocessador: Um módulo de hardware digital que executa instruções. O módulo pode ser um circuito integrado completo.

Microcontrolador: Um módulo completo que contém um microprocessador com memória interna, além de outros módulos.


Bem-vindo ao EE.SE, Mike. Use <enter> x 2 para quebra de parágrafo. Eu consertei para você.
Transistor
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.