main() { short output; long count,max_count; error_count=0; resync(); do { while((input_a() & 3)==sequence[seq_index]) ; seq_index=(seq_index+1)&3; if ((input_a() & 3)!=sequence[seq_index]) resync(); else { if(error_count==0) output_low(pin_a2); else --error_count; max_count=input_b()>>2; count++; if(count>max_count) { output=!output; output_bit(pin_a3,output); count=0; } } } while (true); }
void consumer(){ assert(input_a()==1); assert(input_a()==2); assert(input_a()==3); assert(input_a()==4); assert(input_a()==5); assert(input_a()==6); assert(input_a()==7); assert(input_a()==8); assert(input_a()==9); assert(input_a()==10); report(1); }
void consumer(){ wait_clocks(1000); assert(input_a()==1); wait_clocks(1000); assert(input_a()==2); wait_clocks(1000); assert(input_a()==3); wait_clocks(1000); assert(input_a()==4); wait_clocks(1000); assert(input_a()==5); wait_clocks(1000); assert(input_a()==6); wait_clocks(1000); assert(input_a()==7); wait_clocks(1000); assert(input_a()==8); wait_clocks(1000); assert(input_a()==9); wait_clocks(1000); assert(input_a()==10); report(1); }
void resync() { int value; if(error_count==4) output_high(pin_a2); else error_count++; value=input_a() & 3; if(value==sequence[0]) seq_index=0; else if (value==sequence[1]) seq_index=1; else if (value==sequence[2]) seq_index=2; else if (value==sequence[3]) seq_index=3; }