雑食エンジニアの気まぐれレシピ

日ごろ身に着けた技術や見知った知識などの備忘録的なまとめ.主にRaspberry Piやマイコン(AVR)を使った電子工作について綴っていく予定.機械学習についても書けるといいな.

getter関数のvolatile宣言

AVRの割り込みでクラス内変数を書き替える場合,その変数にgetterでアクセスして値の変更を待つ次のような文がうまく動かなかった.

while(!hoge.getval());

変数自体にvolatile宣言しても変わりがない.どうやら関数自体にvolatile宣言が必要らしい.

int class::getval(void) volatile
{
}

のように宣言すると一応動いた.しかし想定通りの動きとは少し異なってしまい,結局

volatile int temp;
do{
    temp=hoge.getval();
}while(!temp);

と書いたらうまくいった.とはいえただのポーリングに4行も書くのは何かばからしい.何とかならないものか.