システム内の外部ハードウェアと通信するコードがあります。外部ハードウェアによって送信されたイベントに従って、Cソースの状態が変化します。システムの起動中にいくつかのハンドシェイクが発生し、ハンドシェイクに基づいていくつかの情報を他のモジュールに送信する必要があります。コールバックにいくつかのグローバル変数を設定しましたが、外部ハードウェアがいくつかのイベントを2回送信しているため、一部のコールバックが2回呼び出されていることがわかります。これにより、グローバル変数の情報が破損します。
int global_value = 0;
int eventcb()
{
if (some condition)
global_value = 1;
else if (some condition)
global_value = 2;
else
global_value = 0;
}
上記のコードが初めてglobal_value=1と呼ばれるとき、たとえば; 次回コールバックが呼び出されたとき、条件は存在しないため、global_valueは0になります。このコールバックが呼び出された回数を追跡するために別のグローバル変数を使用したくない、またはファイルベースのアプローチ(作成ファイルシステム内のファイル)。この状況に対処するための最適な方法はありますか?イベントを1回だけ送信するように外部ハードウェアを制御することはできません。