2015-06-22 43 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

相關問題