[PIC,C30]#define USE_AND_OR の意味

PICでC30コンパイラを使用したプログラムサンプルを見ると、以下のdefineをしている場合があります。

#define USE_AND_OR



このdefineは、ライブラリの下位互換のために使用されています。



PIC24Fのperipheral libraryでI/Oレジスタのフラグ設定方法が、v3.00から変わった事に伴う対応です。

ver3.00までは、複数のフラグを設定する時ORで結合していました。

ConfigIntUART2(UART_RX_INT_EN | UART_RX_INT_PR6 | UART_TX_INT_EN | UART_TX_INT_PR6);



これが、ver3.01以降ではANDに変わりました。

ConfigIntUART2(UART_RX_INT_EN & UART_RX_INT_PR6 & UART_TX_INT_EN & UART_TX_INT_PR6);




ver3.01以降でver3.00のプログラムを流用する場合は、USE_AND_ORをdefineしておくと、今までどおりorで結合させる事が出来る様になります。


このdefineが、どの様に使われているかuart.hを見ると、以下の様な定義がされています。

#ifndef USE_AND_OR /* Format for AND_OR based bit setting */
/* defines for UxMODE register */
#define UART_EN                 0xFFFF/* Module enable */
#define UART_DIS                0x7FFF/* Module disable */
...
 
#else /* Format for backward compatibility (AND based bit setting). */
 
/* defines for UxMODE register */
#define UART_EN                 0x8000 /* Module enable */
#define UART_DIS                0x0000 /* Module disable */
...
 
#endif


ヘッダを見ても、USE_AND_ORがdefineされていると該当のビットだけが立っており(例えばUART_ENが0x8000でdefineされている)、orで結合できることが確認できます。

関連記事

コメントを残す

メールアドレスが公開されることはありません。