Согласен с CrimsonPig - слишком общий вопрос, но подкину пару примеров
1 Одна из организаций пинг-понг буфера, без флага
Код
int Voice_near[2*N]; // N - степень ДВОЙКИ!!!
volatile unsigned int Voice_near_pos=0;
.......
// прием символа, накопление - обычно в прерывании
Voice_near[Voice_near_pos++] = ADC_receive_data();
Voice_near_pos &= (2*N-1);
.................
while(1)
{
// обработка
int j;
cli(); // критическая секция
j = Voice_near_pos;
sei();
if(!(j & (N-1))
{
Data_processing(&Voice_near[j ^ N]);
}
.....
}
2. Конечно не феншуйно, но можете несколько флагов объеденить в одну переменную и при работе пользоваться масками (0х01,0х02,0х04,0х08 и т.д.)
3. Если программа разрастается, то пора думать о ее правильной организации. Бейте на модули(отдельные файлы), отделите глобальные переменные от переменных, использующихся только в отдельном модуле. Называйте переменные осмысленно (а не i,j,k,p.....). Комментируйте назначение модулей, функций , да и вообще любых непонятные места в программе. И так далее, по этому поводу уже много чего написано и сказано
4. Да еще куча всего, например, можно ввести общую систему синхронизации процессов/потоков (события,сообщения,семафоры.....)
5...................
Сообщение отредактировал alexeyv - Nov 20 2014, 09:14