2015-06-22 2 views
0

Если у вас очень большой массив, Arr [255]. Я пишу функцию, которая должна выполнять задачу всякий раз, когда какой-либо один или более байт в этом массиве обновляется другими функциями. Не могли бы вы помочь мне с наилучшим возможным методом?Как вызвать функцию при изменении байтов массива?

Для любого изменения первых 3 байтов Arr, я могу вызвать функцию 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

Не доступ к массиву непосредственно, но использование геттеры/сеттеры:

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

Смежные вопросы