AVR Libc Home Page AVRs AVR Libc Development Pages
Main Page FAQ Library Reference Additional Documentation Example Projects

<compat/deprecated.h>: 推奨されないものたち


Detailed Description

このヘッダファイルは、以前のバージョンのライブラリで利用可能だったが、結局非推奨となったいくつかのアイテムを納めています。
 #include <compat/deprected.h> 

これらのアイテムは過去の互換性をとるために提供されています。そのため、以前のバージョンのライブラリの元で書かれた古いソースコードの保守を容易にして、その寿命をのばすことができます。これらのアイテムを新しいコードに用いるのはおやめください。

個々の「system-wide interrupts」許可?

I全割り込み許可に加えて、割り込みが必要な機能に対応する個々の割り込み許可も必要です。いくつかの周辺装置は割り込み許可ビットをコントロールレジスタセット内に持っていますが、外部割り込みとタイマ割り込みについては、「system-wide設定レジスタ」を持っています。
※複数の周辺装置の割り込み許可ビットが一つのレジスタに集まっていることを言っているのでしょうか??
In addition to globally enabling interrupts, each device's particular interrupt needs to be enabled separately if interrupts for this device are
desired. While some devices maintain their interrupt enable bit inside the device's register set, external and timer interrupts have system-wide configuration registers.

たとえば、

    // Enable timer 1 overflow interrupts.
    timer_enable_int(_BV(TOIE1));

    // Do some work...

    // Disable all timer interrupts.
    timer_enable_int(0);
Note:
この関数は十分注意してお使いください。既に異なる割り込み許可を行っている場合、この関数は指定以外の割り込み許可を取り消してしまいます。


#define enable_external_int(mask)   (__EICR = mask)
#define INTERRUPT(signame)
static __inline__ void timer_enable_int (unsigned char ints)

旧来の I/O マクロ

AVR-GCC とavr-libc がI/Oポートを現在のように直接扱えなかった頃、全てのI/Oポートアクセスは特別なマクロを介して行い、これをインラインアセンブラに変換して必要な動作を行わせていました。

これらのマクロは、表現式の中でI/Oポートをその名前で読み書きし、C言語のbit操作によりI/Oのbit操作ができるようになって以降、廃止されました。

これらのマクロは、過去のマクロをシミュレートします。これらはI/Oポートに適応されることを想定されていますが、エミュレーションは実際にはC言語の表現式による方法を使っています。そのためこのマクロはメモリに対しても利用可能です。

#define inp(port)   (port)
#define outp(port, val)   (port) = (val)
#define sbi(port, bit)   (port) |= (1 << (bit))
#define cbi(port, bit)   (port) &= ~(1 << (bit))


Define Documentation

#define cbi port,
bit   )     (port) &= ~(1 << (bit))
 
Deprecated:
I/Oポートアドレス=portであるI/Oポートの指定ビットをクリア  
bitに変数を入れるとコードがふくれあがります。bitは定数が望ましい
#define enable_external_int mask   )     (__EICR = mask)
 
Deprecated:
このマクロは GIMSK/EIMSK/GICRレジスタへのアクセスを提供します。このマクロは基本的にレジスタ設定と同等であり、使用するデバイス種別により動作を少々変えます(※対象レジスタを変更する)。このマクロは先に挙げたレジスタのうちどれかが定義されていなければ使用できません。
#define inp port   )     (port)
 
Deprecated:
I/Oポートアドレス=port のポートからの値の読み込みを行います
#define INTERRUPT signame   ) 
 

Value:

void signame (void) __attribute__ ((interrupt));        \
void signame (void)
Deprecated:
全割り込みが許可された割り込みハンドラ関数を作ります。これによりこの割り込みハンドラの処理中、他の割り込みを許します(多重割り込み許可)。

このマクロはあまりにも思いもよらない人々に使われてしまった(※)ので、非推奨となり、将来は削除される予定です。よくわかった上で多重割り込みをできるだけ速く許可したい場合は、こちらの(上に挙げたのと同じ)方法が推奨されます。
※その名称より、普通の割り込みハンドラを作るマクロと勘違いされて使われたことを指していると思われます。そういえば私も・・・.

#define outp port,
val   )     (port) = (val)
 
Deprecated:
I/Oポートアドレス=portであるポートに、値 val を書き込む
#define sbi port,
bit   )     (port) |= (1 << (bit))
 
Deprecated:
I/Oポートアドレス=portであるポートの指定ビットをクリア  
bitに変数を入れるとコードがふくれあがります。bitは定数が望ましい

Function Documentation

static __inline__ void timer_enable_int unsigned char  ints  )  [static]
 
Deprecated:
この関数はTIMSKレジスタ操作を行います。渡す値 ints はデバイス依存します。

Automatically generated by Doxygen 1.4.1 on 23 Jan 2006.