コード例 #1
0
ファイル: main.c プロジェクト: ocupacaoDigital/okupa2015
__interrupt void Serial_receive(void){

    // concatena
    char dado = UCA0RXBUF;
    String_cat(serialString, dado);

    if(dado == '\n'){

        // qtde de ciclos a serem distribuídos
        ciclosPlayerA = (uint8_t) (((float) atoi(serialString) / 100.0) * TOTAL_CICLOS);
        ciclosPlayerB = TOTAL_CICLOS - ciclosPlayerA;

        // cte de Bresenham
        E_A = 2*ciclosPlayerA - TOTAL_CICLOS;
        E_B = 2*ciclosPlayerB - TOTAL_CICLOS;

        // força o reset
        contCiclos = TOTAL_CICLOS;

        // limpa a string
        serialString[0] = '\0';

    }

    // limpa flag interrupt serial
    IFG2 &= ~UCA0RXIFG;
}
コード例 #2
0
ファイル: eval.c プロジェクト: 7hens/yas
static Value _evalMath (Procedure self, ExpType type, Exp a, Exp b) {
	Value va = NULL, vb = NULL;
	switch (type) {
		case AND_EXP:case OR_EXP:
			va = _EVAL(a);
			return (type == AND_EXP && va) || (type == OR_EXP && !va) ? _EVAL(b) : va;
		case EQ_EXP:case NE_EXP:case GT_EXP:case GE_EXP:case LT_EXP:case LE_EXP:
			va = _EVAL(a);
			if (type == NE_EXP) {
				vb = _EVAL(b);
				if (!va) return vb;
				if (!vb) return va;
				return va != vb ? vb : NULL;
			} else if (type == EQ_EXP) {
				vb = _EVAL(b);
				if (va == at_True) return vb;
				if (vb == at_True) return va;
				if (va == vb) return va ? vb : at_True;
				return NULL;
			}
			if (!va) return NULL;
			vb = _EVAL(b);
			if (!vb) return NULL;
			if (type == EQ_EXP) {
				return va == vb ? vb : NULL;
			} else if (Value_is(va, at_Number) && (Value_is(vb, at_Number) || Value_is(vb, at_String))) {
				vb = Value_toNumberValue(vb);
				return (type == GT_EXP && va->u.number > vb->u.number)
					|| (type == GE_EXP && va->u.number >= vb->u.number)
					|| (type == LT_EXP && va->u.number < vb->u.number)
					|| (type == LE_EXP && va->u.number <- vb->u.number)
					? vb : NULL;
			} else if (Value_is(va, at_String) && (Value_is(vb, at_Number) || Value_is(vb, at_String))) {
				vb = Value_toStringValue(vb);
				return (type == GT_EXP && strcmp(va->u.string, vb->u.string) > 0)
					|| (type == GE_EXP && strcmp(va->u.string, vb->u.string) >= 0)
					|| (type == LT_EXP && strcmp(va->u.string, vb->u.string) < 0)
					|| (type == LE_EXP && strcmp(va->u.string, vb->u.string) <= 0)
					? vb : NULL;
			}
			return NULL;
		case CAT_EXP:
			va = Value_toStringValue(_EVAL(a));
			vb = Value_toStringValue(_EVAL(b));
			if (!va) return vb;
			if (!vb) return va;
			return Value_string(String_cat(va->u.string, vb->u.string));
		default:
			va = Value_toNumberValue(_EVAL(a));
			vb = Value_toNumberValue(_EVAL(b));
			if (!(va && vb)) return NULL;
			if (type == ADD_EXP) return Value_number(va->u.number + vb->u.number);
			if (type == SUB_EXP) return Value_number(va->u.number - vb->u.number);
			if (type == MUL_EXP) return Value_number(va->u.number * vb->u.number);
			if (type == DIV_EXP) return Value_number(va->u.number / vb->u.number);
			return NULL;
	}
}