回答:
コンパイラに依存しないようにしたいのはすばらしいことです。残念ながら、ローエンドPICのハイテックコンパイラとCCSコンパイラは、コンパイラ固有のプリプロセッサ宣言、コンパイラ固有のピンアクセスルーチンを多数使用し、CCSコンパイラの場合は、SPI、I2C、ADCなどのコア関数にアクセスします。
多くのプリプロセッサ#define、#ifdef、#ifndefなどがなければ、コードをコンパイラ固有ではないコードに記述して、各コンパイラが提供する特定の部分にアクセスすることはできません。これにより、コードが読めなくなります。
あなたが目指すことができる最高のものは、IDEに依存せず、Eclipseのようなものを使用することです。そのため、少なくとも同じIDEを使用しています。これにより、コア機能を設定するためのCCSウィザードが失われますが、同じIDEを使用する際の柔軟性が向上します。
考慮すべきもう1つのことは、hitechとCCSのどちらにも(少なくとも過去には)真のcコンパイラリンカーがないため、私が個人的に軽視している "#include myfile.c"を使用する必要があったことですが、それは別の話です。
CCSとhitechのみを使用したため、IARコンパイラについてはコメントしていません。どちらも問題なく動作しましたが、モトローラ(現在はフリースケール)プラットフォームから別のプラットフォームに移行し、当時より高度なメトロワークスコンパイラーを使用した後も、満足できませんでした。IARコンパイラは良さそうですが、使用したことがありません。
PIC18パーツを使用している場合は、MicrochipのC18コンパイラをお勧めします。これは、CCSコンパイラよりもANSI Cにはるかに厳密に準拠しています。Hi-Techコンパイラーは使用していないので、よくわかりません。前に述べたように、コンパイラに依存しないコードを本当に作成する必要がある場合は、多数のプリコンパイラディレクティブを使用する必要があります。複数のコンパイラをサポートするマイクロチップのサンプルプログラムをいくつか見て、どのように行われるかを理解することをお勧めします。
コンパイラに依存する可能性が最も高いのは、次のとおりです。
これを処理するための私の好ましい方法は、これらの側面のマクロを記述し、コンパイラーにコンパイラー固有の事前定義マクロに基づいて正しいマクロを選択させることです。この方法でRFM70ライブラリとサンプルアプリケーションを作成し、PIC14(HiTechC)、PIC16(C18)、およびARM(GCC)で実行しました。
(更新)RFM70ライブラリが完成しました。PIC 16F(Hitechコンパイラ)上のC、LPC11114(Cortex)およびLPC2148(ARM7TDMI)(GCCコンパイラ)およびArduino(ATMega128、GCCコンパイラ)上のCおよびC ++をサポートします。これは、Pythonスクリプトでいくつかの前処理を行うことにより、同じソースから(doxygenのドキュメントを含めて)生成されます。Jalサポートは開発中です。おそらくProtonBasicが続くでしょう。http://www.voti.nl/rfm70