サイトの革新に関連して、私はついに地下から抜け出し、有用なものを書くことにしました。 さて、私はさまざまなマイクロコントローラー(MK)をプログラミングし、Eclipseのファンなので、それについて書くことにしました。 PICプログラミングの知識の歴史から始め、職務や趣味のためにPICファミリのMKをプログラミングする人向けのヒントで終わりますが、他のMKアーキテクチャでも同じヒントが機能します。
水曜日、大学での4年生のときに鉄工に取り組みました。科学技術センターで実践的なトレーニングコースを受講し、実際に今日まで働いています。 当時、私たちの会社の主流は、C51とARMベースのMKにKeil uVision2を使用することでした。 ただし、単一の信号(オン/オフボタン)の監視や制御など、PICの単純なタスクに夢中になり、最初の開発環境はメモ帳(紙とコンピューター、PICの紙の本)でした。 私の開発環境は次のようになりました。
ファイルをコンパイルするために、コンパイラの実行可能ファイルと、私がまったく考えずに使用したbatファイルを提供してくれました。コンパイラが何であるかさえわかりません。 一般的に、過酷な時期は...
ああ、誰かがメモ帳++のような奇跡があると私に言ったら! それからMPASMがありましたが、それは貧弱で、私はそれについてほとんど何も覚えていません。 私の意見では、ノートブックの下にプログラムを作成しました。
MPLAB IDE
スキルが向上するにつれて、メモ帳の代わりに、MPLAB IDEのように思えた最もクールなものを使用できることを学びました。
以下が含まれます。
- プロジェクト設定で選択できるCC18およびその他のコンパイラ。
- ライブラリ関数の優れたセット。
- MK PICファミリー用のプラグイン可能なinc-descriptionファイル。アセンブラーで使用するためにシャープ化されています。
- 組み込みのデバッガーとプログラマー。
- しかし、主なもの-C言語のサポート-私にとっては新鮮な空気の息吹でした!
ただし、この開発環境をよく見ると、その惨めさと後進性は、多少なりとも良い条件に慣れているプログラマーを怖がらせることができますが、それについては知りませんでした。 組み込みライブラリ関数のヘルプを個別に開いて、何、どこ、何が呼び出されているかを確認する必要があります。 初心者向け-不可能なタスク。 ただし、トピックフォーラムでは、どのコンパイラを使用するのが良いかという質問が寄せられています。 誰かがMPLAB IDEを使い続けます。
ミクロク
PICのタスクはどんどん減り、MKシリーズC51、ARM7(ARMv7と混同しないでください!)、Cortex-Mで開発の勢いが増し始めました。 しかし、時々PICのプログラムを書くのに助けを求められ、好奇心から新しい開発ツールを試しました。
その時までに、私は長い間Keil uVision3で積極的にプログラミングを行っていました。以前のMBLAB IDEに戻りたくありませんでした。 そこで、PICKitプログラマーに付属するMikroCに会いました。
パンのセットは、MBLAB IDEとほぼ同じですが、さらに充実しています。
- 独自のコンパイラ
- 便利な検索とアクセス可能な説明を備えた組み込み関数ライブラリ。
- PICファミリMK用のプラグ可能なh-ファイル
- 追加の外部ユーティリティのセット
- 幅広いソースの例
- 組み込みのデバッガーとプログラマー。
- 開いているファイルの組み込みタブ。
- ファイル関数ナビゲーション
正直なところ、PICのプログラムの主なニッチを構成する小さな単純なプロジェクトの場合、これで十分です。 初心者でも、ヘルプを使用して簡単に理解でき、作業コードをすばやく作成できます。 ほとんどのPIC開発者はこの開発環境を使用しています。
何らかの方法で、MikroCで別のプロジェクトを作成したので、私はPICを安全に忘れてしまい、PICに戻ることはないと考えました。
しかし、物語は繰り返されるのが大好きです!
3年後の2013年には、
PIC18F4680が置かれた既製CD用のソフトウェアを開発するタスクがありました。 正直なところ、私はPICにそのようなモンスターがいることすら知りませんでした。いつも些細なことしか扱っていませんでした!
タスクは簡単ではありませんでした。インサーキットソフトウェアアップデート用のブートローダーの実装、ハードリアルタイムモードでの作業、ADC、外部DAC、制御ライン、いくつかのタイマーコンパレータの操作。
ちなみに、トピックから少し気を散らすもの:このプロジェクトでのみ、PICのメモリバンク、それらの機能、およびソフトウェア開発に課せられる制限を完全に理解しました。 たとえば、MKのすべてのバンクにはそれぞれ256バイトがあります。 そして自分自身を殺すこともできますが、PICの場合、これらの256バイトを超える構造を作成することはできません-交換プロトコルを実装する際に制限が表面化しますが、
この時点で、Keil uVision3はかなりうんざりしていました。プロジェクトの複雑さが増し、Keilで利用できる機能が不足していたからです。 2011年以降、Eclipse、GCC、makefile構文を習得し、これらのツールを使用してすべてのプロジェクトを開始しました。 さらに、Eclipse +
SDCCバンドルを使用してC51 MKでプロジェクトを実装した経験があります。 Keil uVision4の登場後、プログラミングの都合上、Eclipseに比べてまだ遅れているため、Keil uVision4をインストールし、30分間テストし、取り壊しました。
Eclipse + SDCC
Eclipseは現在、組み込みシステムのソフトウェア開発の分野における事実上の標準です。 人気ブランドのEclipseベースのIDEのリストを以下に示します。
- NXP LPCXpresso IDE
- フリースケールのコードウォリアー
- Xilinx Platform Studio
- テキサス・インスツルメンツのCCS
- Android開発ツール
オートコンプリート、オートコンプリートのツールチップ、マクロ、非アクティブなコードセクションの減光、便利なコードナビゲーションなど-すべてをリストするわけではありません-組み込みシステムの多くの開発者は完全に不慣れであり、これらすべての便利さを知らない:
MKのC / C ++での開発のための純粋なEclipseの主な問題は、Ironプログラマーを入力するのが難しいことです。 makefileで作成-これにはすべて、ドキュメントを読んで勉強し、インターネット上の初心者向けのヘルプやチュートリアルを見つけるために、かなりの初期努力が必要です。 私は、Eclipseで鉄のプログラマーのチームを翻訳した経験がある人として話しています。
私の開発チームのみこの記事を読んだら-教えてください、少なくともHabrahabrのプロファイルハブがここで読んでいる方法を見つけます
ただし、1か月で構文を完全にマスターし、高品質のメイクファイルを作成すると、他のすべてのプロジェクトはローレット付きテンプレートに従って作成され、最小限の個別設定のみが必要になります。
また、PICでプロジェクトを設定するための追加のジェスチャーをいくつか作成する必要がありました。デフォルトでは、EclipseはGCC構文を理解します。 他のコンパイラ(CC18またはSDCC)に組み込まれているさまざまなマクロとディレクティブは、プロジェクトのコンパイル段階とインデックス作成段階で分離する必要があります。 コード内を移動するときに、エディターが不明なディレクティブで誤ったエラーを生成しないように、
eclipse-syntax.hファイルはプロジェクトソースに接続されます。
eclipse-syntax.h#ifndef ECLIPSE_SYNTAX_H_ #define ECLIPSE_SYNTAX_H_ // keyword SDCC defined when compiling with SDCC compiler #ifndef SDCC #ifdef __SDCC_PIC18F4680 #error #endif // file not parsed through makefile - just for proper eclipse syntax #ifndef __CC18__ #error #define near #define far #define rom #define ram #define _asm #define _endasm #define Nop() #define ClrWdt() #define Sleep() #define Reset() #define clrwdt #define nop #define __code #define __data #define __xdata #define __sfr #define __sbit #define __naked #define __wparam #define __bit char #define __at(num) #else // __CC18__ defined - compile stage! #endif // __CC18__ #define __inline #define __asm #define __endasm #define __interrupt(x) #define INTERRUPT(x) #define USING(x) #define CRITICAL #define CRITICAL_START #define CRITICAL_END #define _REENTRANT #else // if SDCC defined #define INTERRUPT(x) __shadowregs __interrupt (x) //#define USING(x) __using (x) #define USING(x) #define CRITICAL __critical #define CRITICAL_START __critical { #define CRITICAL_END } #endif // SDCC defined #endif /* ECLIPSE_SYNTAX_H_ */
さらに、SDCCでは、大規模なプロジェクトを既製のバイナリにリンクできませんでした
。GPUtilsを構成する必要もありました
。GPUtilsには、MK PICメモリカードのgpasm、gpdasm、gplink、および.lkrスクリプトが含まれます。 ただし、コードをデバッグする段階でSDCCで見つけた1つのバグのため、最終的にCC18コンパイラとリンカーに戻りました。 それにもかかわらず、SDCCとGPUtilsは完全に構成されました-苦しんでいる人のために、コンパイラとリンカーCC18、SDCC、GPUtilsを実行するためのオプションに関するmakefile部分を与えます:
エピローグ
ご覧のように、最終的には外部コンパイラーで多数のEclipseを使用するようになりました。 コンパイルオプションの学習は必要であり、単純にそれを拒否するほど複雑なタスクではありません。プログラマーは必要に応じてそれらを学習して適用することができます。 最終的には、PICの下でプロジェクトを作成するために今日利用できる完璧な束を得たと思います。
すべての開発ツールをまとめると、Eclipseと組み合わせて使用するコンパイラーのリストがあり、プログラミングの際にこれを本当に楽しんでいます。
- PICのCC18
- C51のSDCC
- ARM7およびCortex-M用のgnu-arm-embedded
- x86用のMinGW
もちろん、必要に応じて、リストを簡単に補足できます。
私の話を読んだ後、誰かが最終的に古いIDEをやめて新しいIDEをマスターすることを自分で決めることを願っています。
がんばれ!