O que é um bom microprocessador de partida para aprender montagem?

19

Então, eu estou querendo aprender Assembly primeiro em um MP, depois passar para C (já que parece que é o que a maioria deles usa).

Estou querendo entrar na programação incorporada, adoro coisas de baixo nível C (o Kernels / Modules for Linux é principalmente o que eu fiz), mas adoro a ideia de poder programar um nível ainda mais baixo do que isso (microcontroladores / Microprocessadores).

Eu sei sobre o Arduino, e isso é ótimo e tudo, mas não consigo encontrar muitos recursos para usar o Assembly com eles. Os AVRs da Atmel parecem ser muito populares (e baratos), mas quando se trata da parte de hardware real (conectando-os em uma placa de ensaio, etc.), não estou encontrando muita informação.

Quaisquer sugestões / informações ou recursos que vocês / galões conheçam, por favor me avise.

Edit: Outra coisa: parece que todos os livros de microprocessador que eu li (geralmente AVRs) falam sobre o próprio microprocessador e sobre a programação. Mas ainda estou para ver um livro que fala sobre a instalação de todos os componentes (microprocessador, memória, energia etc.). Se eu pudesse encontrar algo que me orientasse, estaria nos negócios. (Quero aprender desde o início.) Sem mencionar que não tenho idéia de como você se comunicaria entre eles.

ctype.h
fonte
3
Odeio enviar você para outro lugar, mas se você estiver interessado em AVRs, precisará saber sobre o AVRfreaks.net .
Kevin Vermeer
Ya estou inclinando-me para AVR ... principalmente porque eles têm tanta informação sobre eles, e eles são muito mais baratos que o TI-MPS430 ...
2
O AVR é ​​popular entre os entusiastas, mas não tenho certeza de onde você está obtendo seus dados de custo. Ambas as famílias têm algumas ofertas inferiores a 1 dólar e outras a 20 dólares.
Kevin Vermeer
Bem ... quando eu estava olhando para o MPS430, parecia que o software (depuradores etc) era um pouco caro quando adicionado às placas de desenvolvimento.
1
Meu conselho é não escolher o MSP430 se você é iniciante. As ferramentas oficiais são boas, mas o suporte gratuito que você encontra on-line não corresponde ao PIC / AVR
Toby Jaffey 31/11/11

Respostas:

14

Eu aprendi em um 68HC11 na faculdade. Eles são muito simples de trabalhar, mas honestamente a maioria dos microcontroladores de baixa potência será semelhante (AVR, 8051, PIC, MSP430). A maior coisa que adicionará complexidade à programação ASM para microcontroladores é o número e o tipo de modos de endereçamento de memória suportados . Você deve evitar dispositivos mais complicados a princípio, como processadores ARM de ponta.

Eu provavelmente recomendaria o MSP430 como um bom ponto de partida. Talvez escreva um programa em C e aprenda substituindo várias funções pela montagem em linha. Comece simples, x + y = z, etc.

Depois de substituir uma função ou algoritmo pelo assembly, compare e compare como você o codificou e o que o compilador C gerou. Essa é provavelmente uma das melhores maneiras de aprender montagem na minha opinião e, ao mesmo tempo, aprender sobre como funciona um compilador, o que é incrivelmente valioso como programador incorporado. Apenas certifique-se de desativar as otimizações no compilador C primeiro, ou você provavelmente ficará muito confuso com o código gerado pelo compilador. Ative gradualmente as otimizações e observe o que o compilador faz.

RISC vs CISC

RISC significa 'Computação com Conjunto de Instruções Reduzidas', não se refere a um conjunto de instruções em particular, mas apenas a uma estratégia de design que diz que a CPU possui um conjunto de instruções mínimo. Poucas instruções para que cada um faça algo básico. Não existe uma definição estritamente técnica do que é necessário 'para ser RISC'. Por outro lado, as arquiteturas CISC têm muitas instruções, mas cada uma 'faz mais'.

As vantagens propostas pelo RISC são que o design de sua CPU precisa de menos transistores, o que significa menos uso de energia (grande para microcontroladores), fabricação mais barata e taxas de clock mais altas, resultando em melhor desempenho. Geralmente, o menor uso de energia e a fabricação mais barata são verdadeiros; o desempenho ainda não alcançou a meta como resultado de melhorias no projeto das arquiteturas CISC.

Atualmente, quase todos os núcleos da CPU são de RISC ou "meio termo". Mesmo com a arquitetura CISC mais famosa (ou infame), x86. As CPUs x86 modernas são núcleos internamente semelhantes a RISC, com um decodificador aparafusado na extremidade frontal que divide as instruções x86 em várias instruções semelhantes a RISC. Eu acho que a Intel chama isso de 'micro-ops'.

Quanto a qual (RISC vs CISC) é mais fácil de aprender na montagem, acho que é uma brincadeira. Fazer algo com um conjunto de instruções RISC geralmente requer mais linhas de montagem do que fazer o mesmo com um conjunto de instruções CISC. Por outro lado, os conjuntos de instruções CISC são mais complicados de aprender devido ao maior número de instruções disponíveis.

A maior parte do motivo pelo qual o CISC tem um nome ruim é que o x86 é, de longe, o exemplo mais comum e é uma bagunça para se trabalhar. Eu acho que isso é principalmente resultado do conjunto de instruções x86 ser muito antigo e ter sido expandido meia dúzia ou mais de vezes, mantendo a compatibilidade com versões anteriores. Até o seu Core i7 de 4.5Ghz pode ser executado no modo 286 (e é inicializado).

Quanto ao ARM ser uma arquitetura RISC, consideraria isso moderadamente discutível. Certamente é uma arquitetura de armazenamento de carga. O conjunto de instruções base é semelhante ao RISC, mas nas revisões recentes o conjunto de instruções cresceu bastante até o ponto em que eu consideraria pessoalmente mais um meio termo entre o RISC e o CISC. O conjunto de instruções do polegar é realmente o mais 'RISCish' dos conjuntos de instruções do ARM.

Marca
fonte
@ Mark - ARMs também são processadores RISC, o conjunto de instruções não é tão ruim assim. Na verdade, é bem projetado; existem algumas instruções para diferenciação entre espaço de usuário x kernelspace e outras complexidades, mas essas podem ser ignoradas enquanto você está iniciando.
Kevin Vermeer
1
@reemrevnivek Eu estava tentando afastá-lo das complexidades de lidar com vários modos de processador e MMUs quando ele começou no ASM, motivo pelo qual mencionei os ARMs de alto nível. A inicialização e a configuração de SoCs ARM de ponta superior também são substancialmente mais complexas do que algo como um AVR / PIC / MSP430.
Mark
RISC? não tenho certeza se entendo a diferença entre isso e o que os outros são ... gostaria de explicar? A maioria dos microcontroladores não é RISC? significa apenas menos conjuntos de instruções corretos?
1
@ sauron eu adicionei à minha resposta re: RISC vs CISC.
Mark
São coisas como AVR / PICS geralmente RISC ou CISC?
8

Eu acho que os microcontroladores PIC de 8 bits são a melhor escolha devido ao número reduzido de instruções.

O efeito colateral do número reduzido de instruções é que você precisa reinventar a roda em comparação com outros microcontroladores com mais instruções.

Porém, depois de aprender com o PIC, você pode migrar para outros microcontroladores e ver o que é melhor para você.

Daniel Grillo
fonte
Eu não discordo totalmente, pois é isso que estou explorando agora, mas os núcleos de 8, 16 e 32 bits têm estratégias de asm totalmente diferentes.
Grady Player
7

Semelhante à sugestão de Mark do 68HC11, o conjunto de instruções da família Freescale 68HCS08 é uma versão reduzida do Motorola 6809, que eu pensava ter um dos conjuntos de instruções de 8 bits mais limpos do seu tempo. Você pode obter uma placa de desenvolvimento com interruptores, LEDs, acelerômetro de 3 eixos e buzina piezo por US $ 79 aqui .

tcrosley
fonte
O número reduzido de registros que o S08 possui versus o HC11 pode tornar as coisas um pouco mais difíceis no início, pois você precisará descobrir que a pilha faz quase tudo (ensinado mais tarde em meu laboratório com HC11s) 12's)). Por extensão, os AVRs são realmente bons, porque você tem 32 registradores incríveis para jogar antes de se preocupar com a pilha.
Nick T
Na verdade, eu gosto da simplicidade do acumulador único, mesmo que possa ser um gargalo. Em vez de usar a pilha para variáveis ​​temporárias, para começar, acho mais simples usar os 144 bytes de variáveis ​​de página direta que são acessíveis com instruções mais curtas (os outros 112 bytes de página direta são usados ​​para registros de E / S). O uso da pilha (que permite rotinas reentrantes e recursivas) pode ser aprendido mais tarde.
tcrosley
O HC (S) 08 não foi derivado do HC05?
usar o seguinte comando
@ Johan.A Sim, você está absolutamente certo. O HCS08 é uma versão aprimorada do HC05. Eu deveria ter mencionado isso. Eu acho que a derivação é algo como 6800 -> 6801 -> 6805 -> HC (S) 08. Escrevi muito código de montagem para o 6805. Comparei o HCS08 ao 6809 para combinar com os outros comentários do 68HC11 (que é aproximadamente uma versão em microcontrolador do 6809).
tcrosley
4

O conjunto de instruções msp430 é bom para aprender sobre o assembler. Evite x86. O braço é outro bom, mas tem muito mais instruções e opções e pode não ser o mais adequado como primeiro conjunto de instruções. Thumb é um subconjunto do conjunto de instruções arm e não é ruim, no github eu tenho um emulador de polegar (thumbulator) e um emulador msp430 (não testado tanto quanto o thumb) que são barebones, apenas o processador e a memória e pouco mais , para que você possa ter uma boa visibilidade do que está acontecendo. Uma alternativa seria o qemu, por exemplo, onde a visibilidade está lá, mas é muito mais difícil de obter, da mesma forma que com uma solução semelhante ao qemu, é preciso muito mais trabalho antes de você descobrir se tem alguma coisa funcionando.
vá para mspgcc4.sf.net para criar uma cadeia de ferramentas e / ou binutils de ações (./configure --target = msp430 --prefix = / something) em combinação com uma llvm de ações. Quando você estiver pronto para o hardware, uma placa de desenvolvimento msp430 custa menos de 5 dólares. Para ferramentas de braço / polegar, basta obter a versão lite em codesourcery. Uma placa córtex-m3 (polegar / polegada2) custa cerca de 12 dólares no momento. Eu evitaria x86 e avr e outros como um primeiro conjunto de instruções; você desejará aprender que outros devem ser bem-arredondados. O conjunto de instruções de foto antigo / original também é algo que vale a pena examinar. Você pode escrever um simulador em uma tarde para ele e aprender o montador. Eu não aprenderia isso primeiro necessariamente, ele ensina algumas coisas interessantes, mas ao mesmo tempo não escala e não é necessariamente representativo dos recursos comuns que você encontra na maioria dos conjuntos de instruções. O msp430 me deu a sensação do pdp11, que é o primeiro conjunto de instruções que eu realmente aprendi, ambos com recursos bem arredondados, principalmente ortogonais. Os conjuntos de instruções msp430 e microchip pic estão documentados na wikipedia, pelo menos como referência, para obter uma imagem completa, obter as fichas / manuais dos fornecedores que descreverão cada modo de registro e endereçamento, redefinição / inicialização, etc.

old_timer
fonte
somente para montador, você só precisa de binutils, pelo menos para arm / thumb ou msp430, e pode construir o montador e o vinculador. Se você deseja um compilador C a partir do qual possa examinar a saída do assembler como uma ferramenta de aprendizado, precisará de mspgcc4 ou codesourcery ou use llvm para ambos.
old_timer
4

Tem certeza de que deseja aprender montagem? Você pode dizer o porquê? É uma tarefa e é cada vez menos relevante ou útil nos dias de hoje. É de uma pessoa que escreveu nele e até mesmo criou programas montados à mão (sem montador, vinculador, apenas um cartão com o conjunto de instruções).

russ_hensel
fonte
Isso não é realmente uma resposta, mas um comentário. Eu também hesitaria em confiar em um programador C incorporado que não estava disposto a vasculhar pedaços de montagem de vez em quando ao tentar entender uma singularidade no comportamento de um projeto.
22813 Chris Stratton
4

Eu também aprendi em um 68HC11 na faculdade. Em vez disso, eles sugerem isso sobre qualquer outro MPU / MCU, eu só queria destacar que a placa de desenvolvimento que usamos tinha um programa de monitor. Assim, a partir de um terminal idiota, poderíamos percorrer o código e examinar os registros ... Sugiro que, quando você souber qual processador se adapta às suas necessidades, verifique também quais placas de desenvolvimento estão disponíveis com um programa de monitor.

mvr
fonte
O programa do monitor parece ser muito útil. Que livro você usou para aprender isso? se você se importa me perguntando ....
Eu também tive experiência com o 68HC11 e o "Programa de Monitoramento" é conhecido como Buffalo Monitor . Basicamente, é apenas um programa armazenado na ROM que se comunica serialmente com o seu PC. Você digita em um terminal e o programa interpreta seus pedidos e devolve informações. Você pode despejar memória na tela, alterar os valores da memória, seguir as instruções, etc. A placa que usamos foi essa . Este controlador é simples de aprender, mas é muito antigo.
sherrellbc
... O livro que usamos foi esse se você estiver interessado. Eu sugeriria usar um controlador mais moderno como o AVR; sua placa de desenvolvimento pode ser encontrada aqui .
24514 sherrellbc
3

Ensino as montagens PIC (núcleo de 14 bits) e ARM. A classe PIC digo que, depois de dominarem a feiura dessa arquitetura, podem assumir qualquer outra coisa. O ARM (não o Thumb / Cortex!) É uma arquitetura muito boa para aprender montagem. Usamos uma placa LPC2148.

Wouter van Ooijen
fonte
Olá Wouter, é bom vê-lo aqui!
precisa
2

Aprendi a montagem PIC de 16 bits com um dsPIC33F. O conjunto do processador é parecido com o C, pois suporta ponteiros e três operações variáveis ​​(A = B + C, por exemplo), o que facilita muito o aprendizado e a adaptação.

Thomas O
fonte
1

Você está confundindo microcontroladores e microprocessadores aqui. O AVR é ​​uma linha de microcontroladores da Atmel, não um microprocessador. Sugiro que você pesquise na wikipedia para entender melhor quais são as diferenças entre elas. Basicamente, um microcontrolador é um sistema mais ou menos completo, enquanto um microprocessador é apenas a CPU (portanto, um microcontrolador possui um microprocessador dentro).

Erik
fonte
Sim, eu sabia disso, não sei por que não coloquei isso. Eu quis dizer como não muitos guias Discussão sobre realmente conectar um MP e Memória (como flash ou EEPROM) etc ...
1
Como a maioria dos microprocessadores agora possui cache / memória e algumas E / S, é uma linha muito embaçada.
Kenny
1
@Sauron - Você tem certeza que sabia disso? Você usou o MP novamente; um microcontrolador (que é o termo correto para um AVR e 99% dos dispositivos que discutimos aqui) quase sempre possui memória (não volátil, como EEPROM e Flash e SRAM volátil). Aprenda a usar o material a bordo antes de começar a se aventurar nos periféricos.
Kevin Vermeer
1

Na minha universidade, aprendemos o design / arquitetura de hardware juntamente com a linguagem assembly (as duas andam de mãos dadas, obviamente) com a arquitetura MIPS (ou talvez DLX ). Desde então, me envolvi um pouco na montagem PIC e AVR na escola / trabalho, e todos são bem parecidos. Eu acho que a montagem do MIPS foi um ótimo ponto de partida, pois a linguagem é muito simples, assim como a arquitetura do processador.

Veja também: este livro . Não é o melhor livro do mundo, mas é o livro padrão de design de computadores para muitas universidades.

Shamtam
fonte
A Microchip PIC32 usa a arquitetura MIPS e é bastante fácil de misturar MIPS assembler com C.
tcrosley
0

minha sugestão é que qualquer pessoa que comece a estudar sobre microcontroladores e processadores deve ler o livro nomeando "codifique a linguagem oculta do computador" se você estudar que quase é especialista em processadores e para programar ou usar melhor o programador e o programa poney prog atmel studio6.1 from atmel site oficial

avinash
fonte
Descreva os principais recursos do livro e do programador, que inclinariam o OP a usá-los exatamente.
Vorac 19/09/2013
trata-se de compreender um microcontrolador como ele é desenvolvido a partir de sistemas digitais e explica a linguagem de montagem
avinash
vá a este local j.mp/mpcinterest para obter esse livro
avinash