ハードウェア割り込みハンドラ(#pragma interrupt) | CS+ V4.01.00
割り込みハンドラとして登録できる関数はvoid 関数名(void)で戻り値と引数は指定できない
つまり、変数の値を変化させたいときはあらかじめグローバルポインタ変数に値を操作したい変数のアドレスを格納しておき、そのポインタ変数に対して関数内で値を操作することは可能である。
以下が割り込み発生時の関数内で変数のデータを操作するための例である。
※割り込み処理の関数内の処理はできるだけ短く、シンプルにすること!
(割り込み処理時はメインの処理が停止しているため)
//他のファイルから参照できないようにstaticなグローバルポインタ変数を作る
static int* count;
//上記で作ったポインタ変数にmain関数内のcount変数のアドレスを格納する関数を作成
void set(int *count_addres)
{
count = count_addres;//ポインタ変数にmain関数内のbtn_push_count変数のアドレスを覚えさせる
}
static void __near r_it_interrupt(void)
{
*count+=1; //外部ファイルにある変数に対して値を加算できる
}