Esempio n. 1
0
/* getcd

   get corrected data
*/
int 
getcd (unsigned char *data, int *mdat, struct cmd *pcmd) {
    int i;
    int err;

    /* read answer of weather station from serial port */
    if ( ( err = getrd(data, mdat, pcmd)) == -1)
	  return(-1);
    
    /* echo raw dataframe */
    err = echodata(data, *mdat);
    
    /* check data frame and do 
    	 data correction for masqueraded bytes */
    if ( ( err = chkframe(data, mdat, pcmd)) == -1)
	  return(-1);
    
    /* echo raw demasqueraded dataframe */
    err = echodata(data, *mdat);

    /* extract message: eliminiate first and last 2 bytes */
    for ( i = 0; i < *mdat - 4; i++ ) {
        data[i] = data[i+2];
    }
    *mdat = *mdat - 4;

    syslog(LOG_DEBUG, "getcd : Data length getcd : %d\n", *mdat);
    return(0);
}
Esempio n. 2
0
File: lab6.c Progetto: chad831/315
/* Funct wb, stage five, assumes the mwBasket */
void wb(MIPS_SIM* sim, FDB* fdBasket, DEB* deBasket, EMB* emBasket, MWB* mwBasket)
{
   /* Check in Basket */
   unsigned func = getFunct(mwBasket->ir);
   if(mwBasket->mdr != 0 || mwBasket->aluOut != 0 || func == 0x2A)
   {
      int funct = getFunct(mwBasket->ir);
      printf(" ----  In WB  ----\n");
      switch (mwBasket->type)
      {
         case 0: /* R type */
            /* need two jumps else */
            if(funct == 0x08) /* jr */
            {
               printf("in wb: exe jr\n");
               sim->pcValue = sim->regs[mwBasket->aluOut];
               basketDefault(fdBasket, deBasket, emBasket, mwBasket);
            }
            else if(funct == 0x09)
            {
               printf("in wb: exe jalr\n");
               sim->regs[31] = sim->pcValue;
               sim->pcValue = sim->regs[mwBasket->aluOut];
               basketDefault(fdBasket, deBasket, emBasket, mwBasket);
            }
            else
               sim->regs[getrd(mwBasket->ir)] = mwBasket->aluOut;
            printRegs(sim);
            clearmw(mwBasket);
            break;

         case 1: /* I type */

            printf("in wb: exe I type\n");
            sim->regs[mwBasket->bReg] = mwBasket->aluOut;
             printRegs(sim);
             clearmw(mwBasket);
            break;

         case 2: /* Load Word */

            printf("in wb: exe lw type\n");
            if(mwBasket->mdr != 0)
               sim->regs[mwBasket->bReg] = mwBasket->mdr;
                printRegs(sim);
                clearmw(mwBasket);
            break;
      }
      clearmw(mwBasket);
   }
   else
      return;

}
Esempio n. 3
0
int jacobi(double *A, double *b, double *x0, double conv, int n)
{
	double *Dinv = NULL, *C = NULL, *xkp1 = NULL,
	*xconv = NULL, *R = NULL, e = conv + 1.0, alpha = -1.0, beta = 1.0,
	gamma = 0.0;
	
	int i, j, k = 0;

	// Ejecutar sólo si la matriz de términos independientes
	// es estrictamente dominante.
	if (!isdom(A, n))
	{
		return ENONDOM;
	}

	C = (double*) malloc(sizeof(double)*n);
	xkp1 = (double*) malloc(sizeof(double)*n);
	xconv = (double*) malloc(sizeof(double)*n);
	Dinv = (double*) malloc(sizeof(double)*n);
	R = (double*) malloc(sizeof(double)*n*n);
	
	// Ha ocurrido un error al reservar memoria
	if (Dinv == NULL || C == NULL || xkp1 == NULL || xconv == NULL || R == NULL)
	{
		return errno;
	}
	
	// Obtenemos R, Dinv y C
	getrd(Dinv, R, A, b, C, n, n);
	
	// Iteramos hasta alcanzar la razón de convergencia
	while (e > conv)
	{
		e = jaciter(A, b, R, C, Dinv, x0, xkp1, xconv, n);
		
		#ifdef DEBUG
		printf("(k = %d) e = %e / conv = %e\n", k, e, conv);
		#endif
			
		k++;
	}
	
	// Liberamos la memoria utilizada
	free(C);
	free(xkp1);
	free(xconv);
	free(Dinv);
	free(R);
	
	return k;
}