There was a problem with your SQL connection - Please contact the administrator
Prototype
Math2Var_F32 (r1, r2, funcId)
Description
Math on two float variables.
r1 = operation(r1, r2);
Return
Nothing
Code Example
The following code example uses the Math2Var_F32 function.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | /* Example Code * Math2Var_F32 * * get buffer indexes r1, r2 and funcId * set buffer in memory * operate * if params used * return result of funcId on 32 bits * else * return 0x00 (operation not ok) or 0x01 (operation ok) on 8 bits * * example VMExecuteCmd: * cmd: |r1 |r2 |funcId|buffer * 0xfb 0x0e 0x00 0x0c 0x00 0x0e [0x?? 0x?? 0x?? = macAdress] 0x00 0x00 0x04 0x00 0x04 0x00 0x00 0x90 0x3f 0x00 0x00 0x00 0x3f * rsp: 0xfb 0x08 0x00 0x2d 0x00 0xe1 0x1e 0x00 0x00 0x00 0x3e */ #include "SMK900.evi" #define SENSORCODE 0x01 function exec_aircmd(){ local rxLen; local useParams; local r1,r2,funcId,val0,val1,val2,val3; local i; local result; rxLen=GetAirBuf(0, 0, 20); if (rxLen>=14){ // 1 byte for paketID + 13 bytes of payload (5 bytes for params and 8 bytes for buffer) useParams= true ; r1=GetBuffer_16(1); r2=GetBuffer_16(3); funcId=GetBuffer_U8(5); for (i=6;i<rxLen;i++){ SetBuffer(i-6,GetBuffer_S8(i),1); } } else { useParams= false ; r1=0; r2=4; funcId=0; // add val0=0x0000; // -0.5 val1=0xBf00; val2=0x0000; // 1.5 val3=0x3FC0; SetBuffer_16(0,val0); SetBuffer_16(2,val1); SetBuffer_16(4,val2); SetBuffer_16(6,val3); } Math2Var_F32(r1,r2,funcId); if (useParams){ SetBuffer_16(0,GetBuffer_16(r1)); SetBuffer_16(2,GetBuffer_16(r1+2)); Send(4); } else { result = 0; if (GetBuffer_16(2)==0x3F80&&GetBuffer_16(0)==0x0000){ //add(-0.5,1.5) SetBuffer_16(0,val0);SetBuffer_16(2,val1); SetBuffer_16(4,val2);SetBuffer_16(6,val3); funcId=1; Math2Var_F32(0,4,funcId); // substract if (GetBuffer_16(2)==0xBF80&&GetBuffer_16(0)==0x0000){ //substract(-0.5,1.5) SetBuffer_16(0,val0);SetBuffer_16(2,val1); SetBuffer_16(4,val2);SetBuffer_16(6,val3); funcId=2; Math2Var_F32(0,4,funcId); // multiply if (GetBuffer_16(2)==0xBF40&&GetBuffer_16(0)==0x0000){ //multiply(-0.5,1.5) SetBuffer_16(0,val0);SetBuffer_16(2,val1); SetBuffer_16(4,val2);SetBuffer_16(6,val3); funcId=3; Math2Var_F32(0,4,funcId); // divide if (GetBuffer_16(2)==0xBEAA&&GetBuffer_16(0)==0xAAAB){ //divide(-0.5,1.5) SetBuffer_16(0,val2);SetBuffer_16(2,val3); SetBuffer_16(4,val0);SetBuffer_16(6,val1); funcId=4; Math2Var_F32(0,4,funcId); // modulo if (GetBuffer_16(2)==0x0000&&GetBuffer_16(0)==0x0000){ //modulo(1.5,-0.5) SetBuffer_16(0,val0);SetBuffer_16(2,val1); SetBuffer_16(4,0x4000);SetBuffer_16(6,0x0000); funcId=5; Math2Var_F32(0,4,funcId); // shiftleft if (GetBuffer_16(2)==0x3FC0&&GetBuffer_16(0)==0x0000){ //shiftleft(-0.5,2) SetBuffer_16(0,val0);SetBuffer_16(2,val1); SetBuffer_16(4,val2);SetBuffer_16(6,val3); funcId=6; Math2Var_F32(0,4,funcId); // atan2 if (GetBuffer_16(2)==0xBEA4&&GetBuffer_16(0)==0xBC7D){ //atan2(-0.5,1.5) result = 1; SetBuffer(0,result,1); Send(1); /* SetBuffer(4,result,1); Send(5); */ } } } } } } } if (result==0){ SetBuffer(0,result,1); SetBuffer(1,funcId,1); Send(2); /* SetBuffer(4,result,1); SetBuffer(5,funcId,1); Send(6); */ } } } function main() { local execType; execType = GetExecType(); if (execType==MESHEXECTYPE_AIRCMD_bm){ exec_aircmd(); } } |