2009-09-24 7 views
8

Je vais commencer à travailler sur un projet où j'ai besoin d'avoir une bonne compréhension du langage d'assemblage pour le microcontrôleur PIC. Je suis intimement familier avec le C/C++, donc je sais coder pour la plupart, et j'ai déjà fait de nombreux projets pour le PIC, donc je comprends l'architecture, mais j'ai fait toute ma programmation en 'C'.Quelle est la meilleure ressource pour apprendre le langage d'assemblage pour les microcontrôleurs PIC

Existe-t-il un bon livre ou site Web expliquant bien ce que signifient toutes les commandes de l'Assembly et comment faire des tâches assez simples (LED clignotantes, mathématiques de base, etc ...) pour le microcontrôleur PIc? Edit: Le but principal de ce post est de demander des ressources pour apprendre l'assemblage, sans débattre des mérites de C vs Assembly dans les PIC, ou si le PIC est un «bon» microcontrôleur à utiliser. J'utilise un microcontrôleur PIC18 si cela fait une différence.

Répondre

3

Je voudrais essayer ceci: Pic Tutorial

+0

C'est ce que j'avais l'habitude d'apprendre de l'assemblage (pour le PIC), cependant, ceux dans le futur être averti: J'ai remarqué quelques erreurs et quelques fautes d'orthographe dans les tutoriels. Cela étant dit, cependant, j'ai toujours estimé que c'était une bonne ressource pour «avoir une idée» de l'Assemblée. Une autre bonne ressource pour apprendre plus d'assemblage était le " Intro to PIC C" de Nigel Gardner. C'est un livre sur "C" mais indique comment certaines des boucles sont faites dans l'Assemblée, donc c'est aussi une bonne ressource. – Seidleroni

+0

Le site dans le lien est en panne! – svarog

0

Je suis un croyant par écrit un désassembleur. Commencez avec un programme très simple d'une ou deux lignes qui charge un registre avec une constante peut-être (dois lire un tutoriel ou quelque chose pour apprendre cette étape). Assemblez-le. Enregistrez le binaire dans un format que vous êtes capable ou désireux d'écrire un programme à lire (Intel hex peut-être, ou elf s'ils supportent cela).

Ecrivez un programme pour lire le fichier binaire et extraire le programme puis prenez ces octets et écrivez un désassembleur (même si le vendeur a un désassembleur, vous devriez toujours en écrire un).

Commencez maintenant l'itération du processus, apprenez une nouvelle instruction ou une nouvelle façon d'utiliser cette instruction, une instruction à la fois. Écrire du code pour désassembler cette instruction ou cette option. Essayez d'écrire l'assembleur pour manipuler chacun des bits de l'instruction. Au moment où vous passerez à travers le jeu d'instructions, vous connaîtrez le jeu d'instructions mieux que la plupart des gens qui l'utilisent tous les jours, vous saurez comment écrire l'assembleur pour chacune des options pour chacun des opcodes, vous pouvez aussi Apprenez pourquoi cette instruction ne peut adresser que N octets à partir de son emplacement et que d'autres peuvent accéder à n'importe quoi, ou que l'instruction ne peut utiliser qu'un bit N immédiat et que d'autres peuvent utiliser n'importe quelle valeur. Ce genre de chose.

J'ai utilisé ce processus plusieurs fois et j'ai appris de nombreux jeux d'instructions, ymmv. Après le premier couple-trois, le processus ci-dessus peut prendre seulement un après-midi pour terminer.

EDIT:

L'objectif est ici l'éducation non le prochain grand projet sourceforge. La sortie peut être aussi laide ou incomplète que vous le souhaitez, vous êtes le seul à le lire.

Remarque: Un désassembleur générique pour les jeux d'instructions de longueur variable peut être quelque peu difficile, vous ne voulez pas désassembler linéairement le binaire dans ce cas, vous voulez suivre tous les chemins d'exécution. Je l'éviterais. Prendre des programmes simples qui exécutent un assemblage linéaire, puis désassembler n'est pas difficile, même sur un jeu d'instructions de longueur variable. Vous pouvez en apprendre beaucoup sur un jeu d'instructions en désassemblant et en examinant la sortie d'un compilateur C (ou d'un autre langage de haut niveau), si le compilateur n'a pas d'option de sortie assembleur ou s'il n'a pas de désassembleur pour en profiter (à moins qu'il s'agisse d'un jeu d'instructions de longueur fixe).

Notez également une fois que vous avez appris l'assembleur pour un processeur, le second est beaucoup plus facile, et ainsi de suite.Les choses que vous devez apprendre de l'une à l'autre deviennent souvent de la taille de ce saut, quelles sont les règles sur l'immédiat, l'adressage indirect, essentiellement tout ce qui est directement lié à l'examen des opcodes. Vous pouvez l'apprendre sans regarder les opcodes, mais vous devez compter sur la documentation ou les messages d'erreur de l'assembleur étant de haute qualité.

+4

Es-tu sérieux? Il semble que le PO doive faire son travail; qui va le payer pour prendre l'approche que vous suggérez? – Clifford

+0

Faire cela dans un après-midi sonne ... vite. –

+0

oui, assez sérieux. la programmation c'est la programmation c'est une question de syntaxe, apprendre la syntaxe en lisant et ne pas faire est cher et lent. Essayer d'écrire et d'exécuter et déboguer des programmes juste pour apprendre une instruction est lent et coûteux, c'est une solution très bon marché et rapide et fiable. Si vous pouvez trouver un moyen d'apprendre un ISA à l'intérieur et à l'extérieur en quelques heures sans aucun équipement autre qu'un ordinateur bon marché et un compilateur gratuit, allez-y. (OK lecteur pdf et assembleur) –

5

Il existe plus d'une architecture PIC, avec des jeux d'instructions significativement différents. Microchip n'a pas la consistance architecturale d'Atmel AVR par exemple. Vous devez donc spécifier ce que vous utilisez - PIC12, 16, 24, 32 par exemple. Donc, tout d'abord, je suggère d'éviter PIC assembler sur la base que ce que vous apprenez sur un PIC12, ce qui peut ne pas être très applicable à un PIC24. Deuxièmement, j'éviterais d'utiliser un PIC du tout si je le pouvais en tant que développeur de logiciel - bien que j'admets qu'il y ait d'autres considérations, et que vous n'ayez pas le choix.

Ce que vous pouvez choisir n'est pas d'utiliser l'assembleur. Alors que les PICs inférieurs ne sont peut-être pas les mieux adaptés à la génération de code C, c'est le problème du rédacteur du compilateur; il est encore plus rentable en termes de temps de développement d'utiliser C si possible. D'autre part, pour les produits à grand volume, si vous pouvez adapter le code dans une partie plus petite en utilisant l'assembleur, cela peut être un facteur. Décider d'avoir besoin de l'assembleur avant d'avoir testé une solution C est souvent une «optimisation prématurée». Même si l'implémentation C échoue en termes de contraintes de taille ou de temps, vous pouvez simplement l'appeler un prototype et le recoder pour répondre aux contraintes. Faire ce qui peut être encore plus rapide que de commencer le codage de l'assembleur à partir de zéro et de lutter à la fois avec la conception et l'ensemble d'instructions en même temps. Dites à votre patron que vous allez le prototyper en C, alors quand il répondra aux exigences, personne ne voudra gaspiller de l'argent pour le re-codage, c'est un code assembleur non portable et non supportable. Pour répondre à votre question, en supposant que vous ayez besoin de travailler rapidement et efficacement, utilisez les exemples et les notes d'application de Microchip autant que possible, et familiarisez-vous avec le jeu d'instructions de la référence du jeu d'instructions du fabricant. Le jeu d'instructions pour les parties inférieures n'est pas important. Pour le travail au quotidien, j'utilise comme aide-mémoire une «carte de référence du jeu d'instructions» - elle résume tous les détails essentiels de chaque instruction, généralement en quelques pages - imprimez-la à double face et plastifiez-la! ;). Voici un PIC16 example

+0

Je suis entièrement d'accord. J'ai fait de la programmation PIC en assembleur, et ce n'est pas vraiment difficile d'apprendre le jeu d'instructions. Cependant, programmer à un niveau aussi bas n'est pas une joie - C est tellement plus agréable. J'irais pour C (et éloignez-vous de PIC si nécessaire) à moins qu'il y ait une analyse de rentabilisation convaincante pour l'assembleur. –

+1

Pour les petites images plus anciennes, asm est rapide, facile, de meilleurs résultats que C. Le nouveau pic32 est dérivé d'un mips donc une bête tous ensemble différents. L'assembleur de pic d'apprentissage peut signifier deux ou trois jeux d'instructions différents, donc je suis absolument d'accord que vous devez spécifier de quel PIC vous parlez. –

+0

Même si vous programmez en C, il est utile de connaître l'assemblage sous-jacent pour comprendre ce que le compilateur fera avec ce que vous tapez. – Crashworks

2

Il pourrait être une réponse assez tard, mais vous pourriez bénéficier de ce cours de laboratoire écrit principalement pour apprendre l'assemblage PIC grâce à des applications.

Vérifier: http://embedded-ju.ucoz.com/

Vérifiez l'onglet expériences, il comprend:

Expérience 0 - (Introduction à MPLAB)

Expérience 1 - (Introduction à PIC Assemblée Instruction Set)

Expérience 2 - (En savoir plus sur Instruc tion ensemble et techniques de programmation modulaires)

Expérience de 3 - (système de base d'analyse et de conception)
3.1.Guide de matériel Je

Expérience 4 - (LCD - HD44780)

Expérience 5 - (clavier)

Expérience 6 - (HI-TECH compilateur C dans MPLAB) 6.1. Programmation PIC avec le guide ICD2.

Expérience 7 - (timers (Timer0 et Timer2))

Expérience 8 - (USART)

Expérience 9 - (Software PWM & A/D)


Il est basé sur la série PIC 16, notamment 16f84A, 16F877A et 16F917. Les exemples sont entièrement comme et les expériences pleinement expliquées.

Questions connexes