0

我有一个与系统中的外部硬件通信的代码。根据外部硬件发送的事件,我的 C 源代码中的状态将会改变。在系统启动过程中发生了一些握手,需要根据握手将一些信息发送到其他模块。我在回调中设置了一些全局变量,但观察到外部硬件两次发送一些事件,这使得一些回调被调用两次。这会破坏全局变量中的信息。

 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。我不想使用另一个全局变量来跟踪调用此回调的次数,甚至是基于文件的方法(创建文件系统中的文件)。有什么最佳方法来处理这种情况吗?我无法控制外部硬件使其仅发送一次事件。

4

2 回答 2

0

你可以实现一个队列。对于每个回调,可以创建一个回调数据,该数据具有 global_value 和一些其他参数(例如,回调 id 等以标识回调)。global_value 的当前使用者可以从队列中挑选数据并使用它并从队列中删除该项目。我假设您有某种消费者正在从 global_value 对象中读取数据。

于 2012-07-23T14:40:08.863 回答
0
int global_value = -1;
 int eventcb()
 {
    if (some condition && (global_value != -1) )
          global_value = 1;
    else if (some condition && (global_value != -1) )
          global_value = 2;
    else
          global_value = 0;
 }

基本上,仅当全局处于其初始状态时才进行状态转换更改。

当然,您可以在if语句中添加更多条件,以确保正确覆盖所有状态转换。

于 2012-07-23T14:44:07.547 回答