7

PIC マイクロコントローラーのアセンブリ言語を十分に理解する必要があるプロジェクトに取り掛かります。私は C/C++ に精通しているので、ほとんどのコーディング方法を知っています。すでに PIC の多くのプロジェクトを行っているので、アーキテクチャは理解していますが、プログラミングはすべて「C」で行っています。

すべてのアセンブリ コマンドの意味と、PIC マイクロコントローラーのかなり単純なタスク (LED の点滅、基本的な数学など) の実行方法を説明している良い本または Web サイトはありますか?

編集: この投稿の主な目的は、アセンブリを学習するためのリソースを要求することであり、PIC での C とアセンブリのメリットや、PIC が使用するのに「良い」マイクロコントローラーであるかどうかについて議論することではありません。違いがある場合は、PIC18 マイクロコントローラーを使用しています。

4

5 に答える 5

5

大きく異なる命令セットを持つ複数の PIC アーキテクチャがあります。Microchip には、たとえば Atmel AVR のアーキテクチャの一貫性がありません。したがって、使用しているものを指定する必要があります-たとえば、PIC12、16、24、32。

したがって、まず最初に、PIC12で学んだことはPIC24にはあまり当てはまらない可能性があることに基づいて、PICアセンブラを避けることをお勧めします。第二に、私がソフトウェア開発者としてできることなら、PIC の使用をまったく避けたいと思います。

あなたが選択できるのは、アセンブラを使用しないことです。ローエンドの PIC はおそらく C コードの生成に最適ではありませんが、それはコンパイラの作成者の問題です。可能な場合は C を使用する方が、開発時間の点でさらに費用対効果が高くなります。一方、大量生産品の場合、アセンブラを使用して小さな部品にコードを収めることができれば、それが要因になる可能性があります。C ソリューションをテストする前にアセンブラーが必要であると判断することは、多くの場合、「時期尚早の最適化」です。C 実装がサイズや時間の制約に失敗した場合でも、それをプロトタイプと呼び、制約を満たすように再コーディングすることができます。アセンブラーのコーディングをゼロから開始し、設計と命令セットの両方に同時に苦労するよりも、実行する方が速い場合があります。上司に C でプロトタイプを作成することを伝え、要件を満たせば、

最後に、あなたの質問に答えるために、作業を迅速かつ効率的に行う必要があると仮定して、Microchip の例とアプリケーション ノートを可能な限り使用し、メーカーの命令セット リファレンスから命令セットに慣れてください。ローエンド部分の命令セットは大きくありません。日々の作業では、「指示セット参照カード」を補助メモとして使用するのが好きです。これには、各指示の重要な詳細がすべてまとめられており、通常は数ページにまとめられています。両面印刷してラミネートします。;))。これはPIC16の例です

于 2009-09-24T21:01:53.170 に答える
2

私はこれを試してみます: Pic チュートリアル

于 2009-09-24T18:54:33.033 に答える
2

返信がかなり遅くなるかもしれませんが、主にアプリケーションを通じて PIC アセンブリを学習するために書かれたこのラボ コースを利用することをお勧めします。

チェック:http ://embedded-ju.ucoz.com/

[実験] タブを確認してください。次の内容が含まれています。

実験 0 - (MPLAB の紹介)

実験 1 - (PIC アセンブリ命令セットの紹介)

実験 2 - (命令セットとモジュラー プログラミング手法の詳細)

実験 3 - (基本的なシステム分析と設計)
3.1. ハードウェアガイドⅠ

実験4 - ( LCD - HD44780 )

実験 5 - (キーパッド)

実験 6 - (MPLAB で HI-TECH C コンパイラを使用) 6.1. ICD2 ガイドによる PIC プログラミング。

実験 7 - (タイマー (Timer0 と Timer2))

実験8 - (USART)

実験 9 - (ソフトウェア PWM & A/D)


これは PIC 16 シリーズ、特に 16f84A、16F877A、および 16F917 に基づいています。例は完全にコメントされており、実験は完全に説明されています。

于 2010-12-23T13:17:35.603 に答える
0

PICList: http://piclist.com/

特に、

于 2011-03-13T04:09:49.920 に答える
0

私は逆アセンブラを書くことを信じています。おそらく、レジスタに定数をロードする非常に単純な1行または2行のプログラムから始めます(そのステップを学ぶためにチュートリアルまたは何かを読む必要があります)。組み立てます。バイナリを、読み取り可能なプログラムを作成できる、または作成できる形式で保存します (おそらく intel hex、サポートされている場合は elf)。

バイナリ ファイルを読み取ってプログラムを抽出し、それらのバイトを取得して逆アセンブラを書き込むプログラムを作成します (ベンダーが逆アセンブラを持っている場合でも、逆アセンブラを作成する必要があります)。

次に、プロセスの反復を開始し、新しい命令またはその命令を使用する新しい方法を一度に 1 つずつ学習します。その命令またはオプションを逆アセンブルするコードを記述します。命令の各ビットを操作するアセンブラを作成してみてください。

命令セットを理解する頃には、毎日それを使用するほとんどの人よりも命令セットをよく知っているでしょう。また、各オペコードのオプションごとにアセンブラを記述する方法を知っているでしょう。ある命令はその場所から N バイトしかアドレス指定できず、他の命令は何にでもアクセスできます。または、その命令は N ビットの即値のみを使用でき、他の命令は任意の値を使用できます。そのようなこと。

私はこのプロセスを何度も使用し、多くの命令セット、ymmv を学びました。最初の 2 ~ 3 回を過ぎると、上記のプロセスが完了するまでに 1 日しかかからない場合があります。

編集:

ここでの目標は教育であり、次の優れた SourceForge プロジェクトではありません。出力は、あなたがそれを読むのはあなただけです。

注: 可変長命令セットの一般的な逆アセンブラーはやや難しい場合があります。バイナリを線形に逆アセンブルしたくない場合は、すべての実行パスをたどる必要があります。私はそれを避けます。アセンブルと逆アセンブルを直線的に実行する単純なプログラムは、可変長命令セットでも難しくありません。コンパイラにアセンブラ出力オプションがない場合、または取得できない逆アセンブラがない場合は、C コンパイラ (またはその他の高水準言語) の出力を逆アセンブルして調べることで、命令セットについてかなりのことを学ぶことができます。これを利用するには (固定長の命令セットを除く)。

また、1 つのプロセッサのアセンブラを習得すると、2 番目のプロセッサははるかに簡単になります。次から次へと学習する必要があることは、このジャンプがどれだけ大きくなるか、即値のルール、間接アドレス指定、基本的にオペコードの調査に直接関係するすべてのことです。オペコードを見なくても学習できますが、ドキュメントやアセンブラーのエラー メッセージが高品質であることを信頼する必要があります。

于 2009-09-24T19:41:02.303 に答える