2015-06-22 34 views
0

如果有一个非常大的数组,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; 
} 

我怎么能做到这一点整个阵列,而无需耗费太多的处理时间,提高代码的长度和大小?

+0

你可以修改'Task()'来返回已更改索引的列表吗? – usr2564301

+0

嗨Jongware,我不知道数组的哪个索引正在改变。 – ajishalfred

回答

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()立即执行。您不必定期检查整个阵列。

+0

嗨dlask,我不知道这个数组写在哪里。我所有的是一个数组,其字节频繁变化 – ajishalfred

+0

你的实际环境是什么?一个微控制器程序,其数组内容由中断处理程序修改而来?多线程应用程序?究竟是什么? – dlask

+0

是的,一个微控制器项目,其中阵列内容在发生中断后被修改并写入独立的.c文件。由于我不太了解该特定文件的编码,因此我不想打扰数组正在被修改的那部分代码。 – ajishalfred

相关问题