速度が要求されるなら、データ受け渡しはインライン関数にする。//pure な Cでは無理か?
速度が要求されないなら
for(i=0;i<LENGTH;i++) if(ary[(i+start)%LENGTH)] == data) ...
みたくループを一つにする。
LENGTH が 1024 とかなら、(i+start) & 0x3FF と書けるから後者でも多少高速かと。