Листинг №5
Пример сетевой программы для процессоров i860
/* Мастер-задача*/
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <channel.h>
int last; /* число модулей */
int i1; /* счетчик секунд */
int ik; /* счетчик обработанных участков */
int going; /* признак выхода из цикла */
int time_beg, time_end;
#include "parametr.c"
main( ) {
/* Определение каналов */
Channel* right_in = (Channel*) get_param(4);
Channel* right_out = (Channel*) get_param(5);
last = get_int_param(6)-1;
load_buff (buf, BUFSIZE);
/* Засылка данных в сеть */
ChanOutInt ( right_out, BUFSIZE);
ChanOut ( right_out, buf, BUFSIZE);
/*-------------------------------------------------------------------*/
begin:
going=1; i1=0; ik=0;
/*------------*/
while (going)
{ time_beg=ProcTime(); time_end=time_beg+15625;
if (time_end < 0) time_end=time_end & 0X7FFFFFFF;
if ( ChanInTimeFail(right_in,netbuf,NETBUFSIZE,time_end) == 0 ) going=0;
else
{ ChanReset(right_in,0);
i1++; printf("\033[8;68H"); printf("Timer:%3d sec\n",i1);
if (i1 > 2000)
{ printf(" Результат от 1 процессора не получен ! \n\n");
printf(" Нажмите <Ctrl>+<Break> и перезапустите программу !!! ");
getchar(); printf("\033[36;40m"); exit(1);
}
}
}
/*------------*/
ik ++;
if ( netbuf [0] )
{
printf(" УРА !!! %d, %d, %d, %d", netbuf [1], netbuf[2],
netbuf [3], netbuf[4]);
goto END; }
if ( ik < ((65536 / last) +1) ) goto begin;
END:; }
/* Woker задача*/
#include <process.h>
#include <math.h>
#include "parametr.c"
main (){
long Tail,tram,last,dl;
/*---- Опpделение каналов ----*/
Channel * left_in = (Channel*) get_param(4);
Channel * left_out = (Channel*) get_param(5);
Channel * right_in = (Channel*) get_param(6);
Channel * right_out = (Channel*) get_param(7);
Tail=get_int_param(1);
last= get_int_param(2)-1;
tram= get_int_param(3)-1;
/* принял длину из канала */
dl = ChanInInt (left_in);
ChanIn ( left_in, buf, dl);
if (Tail)
{
ChanOutInt (right_out, dl);
ChanOut (right_out, buf, dl);
}
/*-------------------------------------------------------------*/
/*----- Обработка --------------------------------------------*/
/*-------------------------------------------------------------*/
hard_core(buf[tram*NETBUFSIZE]);
if (Tail)
{
ChanIn (right_in,netbuf,NETBUFSIZE);
}
ChanOut (left_out,netbuf,NETBUFSIZE);
}