如何在数组的字节更改时调用函数?

时间:2015-06-22 09:23:35

标签: c arrays

如果有一个非常大的数组,Arr [255]。我正在编写一个函数,当其他函数更新了此数组中的任何一个或多个字节时,该函数应该执行任务。你能用最好的方法帮助我吗?

对于Arr的前3个字节的任何更改,我可以调用函数Task(),如下所示。

int main (void)
{
   while (1)
   {
       CheckArrayUpdated ();
   }
}

void CheckArrayUpdated (void)
{
    static char ArrPre [3];

    if (
       (ArrPre [0] != Arr [0]) ||
       (ArrPre [1] != Arr [1]) ||
       (ArrPre [2] != Arr [2]) 
       )
    {
        Task ();

        ArrPre [0] = Arr [0];
        ArrPre [1] = Arr [1];
        ArrPre [2] = Arr [2];
    }
    else;
}

如何在不消耗大量处理时间和增加代码长度和大小的情况下为整个阵列执行此操作?

1 个答案:

答案 0 :(得分:2)

不要直接访问数组,而是使用getter / setter:

static char arr[255];

char read_arr(int index) {
    return arr[index];
}

void write_arr(int index, char value) {
    if (arr[index] != value) {
        Task();
        arr[index] = value;
    }
}

只要将新的(不同的)值写入数组,就会检测到更改,并且Task()可以立即执行。您不必再定期检查整个阵列。