次のようにLAN経由の接続要求を待ち受けているmain()ループを考えます。
また、GPSからおよそ1秒ごとに送られてくるSPIシリアル通信の頭文字 "$" を
発見した時、パーサに通すような処理をします。
/* 一部簡略化しています */
void main(void){
while(1){
if(!isTcpOpen(SOCKET0)){
TCP_ServerOpen();
}else if( getSnSR(SOCKET0) == Sn_SR_CLOSED){
TCP_ServerClose();
}
if(io_getchar() == '$'){
perse(); /* パーサを起動 */
}
}
}
このとき、LAN経由の接続要求を0.2秒ごとに受けるのですが、
LANとSPIの2つの通信タイミングが衝突することが容易に考えられます。
接続要求には完全にか、あるいは優先して応答すべきだと思いますので、
このさいSPI通信のデータは取りこぼしがあっても構いません。
割り込みなどを使って、なんとかスマートに処理したいと思うのですが、
良い知恵をお持ちのかたはいらっしゃいますか?