Glue logic must implement:
if (debug command queue is not empty) execute debug command else if (executing a thread) run VM else if (event queue is not empty) fetch event run VM else sleep until something happens
| #define ASEBA_NATIVES_STD_DESCRIPTIONS |
&AsebaNativeDescription_veccopy, \ &AsebaNativeDescription_vecfill, \ &AsebaNativeDescription_vecaddscalar, \ &AsebaNativeDescription_vecadd, \ &AsebaNativeDescription_vecsub, \ &AsebaNativeDescription_vecmul, \ &AsebaNativeDescription_vecdiv, \ &AsebaNativeDescription_vecmin, \ &AsebaNativeDescription_vecmax, \ &AsebaNativeDescription_vecdot, \ &AsebaNativeDescription_vecstat, \ &AsebaNativeDescription_mathmuldiv, \ &AsebaNativeDescription_mathatan2, \ &AsebaNativeDescription_mathsin, \ &AsebaNativeDescription_mathcos, \ &AsebaNativeDescription_mathrot2, \ &AsebaNativeDescription_mathsqrt, \ &AsebaNativeDescription_vecnonzerosequence
snippet to include descriptions of standard native functions
| #define ASEBA_NATIVES_STD_FUNCTIONS |
AsebaNative_veccopy, \ AsebaNative_vecfill, \ AsebaNative_vecaddscalar, \ AsebaNative_vecadd, \ AsebaNative_vecsub, \ AsebaNative_vecmul, \ AsebaNative_vecdiv, \ AsebaNative_vecmin, \ AsebaNative_vecmax, \ AsebaNative_vecdot, \ AsebaNative_vecstat, \ AsebaNative_mathmuldiv, \ AsebaNative_mathatan2, \ AsebaNative_mathsin, \ AsebaNative_mathcos, \ AsebaNative_mathrot2, \ AsebaNative_mathsqrt, \ AsebaNative_vecnonzerosequence
snippet to include standard native functions
| #define AsebaMaskClear | ( | v, | |||
| m | ) | ((v) &= (~(m))) |
| #define AsebaMaskIsClear | ( | v, | |||
| m | ) | (((v) & (m)) == 0) |
| #define AsebaMaskIsSet | ( | v, | |||
| m | ) | (((v) & (m)) != 0) |
| #define AsebaMaskSet | ( | v, | |||
| m | ) | ((v) |= (m)) |
| #define BIT_CLR | ( | v, | |||
| b | ) | ((v) &= (~(1 << (b)))) |
| #define BIT_SET | ( | v, | |||
| b | ) | ((v) |= (1 << (b))) |
| #define GET_BIT | ( | v, | |||
| b | ) | (((v) >> (b)) & 0x1) |
| typedef void(* AsebaNativeFunctionPointer)(AsebaVMState *vm) |
| anonymous enum |
| void AsebaDebugBareRun | ( | AsebaVMState * | vm, | |
| uint16 | stepsLimit | |||
| ) |
| void AsebaDebugBreakpointRun | ( | AsebaVMState * | vm, | |
| uint16 | stepsLimit | |||
| ) |
| void AsebaNative_mathatan2 | ( | AsebaVMState * | vm | ) |
Function to perform atan2
| void AsebaNative_mathcos | ( | AsebaVMState * | vm | ) |
Function to perform cos
| void AsebaNative_mathmuldiv | ( | AsebaVMState * | vm | ) |
Function to perform dest = (a*b)/c in 32 bits
| void AsebaNative_mathrot2 | ( | AsebaVMState * | vm | ) |
Function to perform the rotation of a vector
| void AsebaNative_mathsin | ( | AsebaVMState * | vm | ) |
Function to perform sin
| void AsebaNative_mathsqrt | ( | AsebaVMState * | vm | ) |
Function to perform sqrt
| void AsebaNative_vecadd | ( | AsebaVMState * | vm | ) |
Function to add two vectors
| void AsebaNative_vecaddscalar | ( | AsebaVMState * | vm | ) |
Function to add a scalar to each element of a vector
| void AsebaNative_veccopy | ( | AsebaVMState * | vm | ) |
Function to copy a vector
| void AsebaNative_vecdiv | ( | AsebaVMState * | vm | ) |
Function to divide two vectors elements by elements
| void AsebaNative_vecdot | ( | AsebaVMState * | vm | ) |
Function to perform a dot product on a vector
| void AsebaNative_vecfill | ( | AsebaVMState * | vm | ) |
Function to fill all the elements of a vector to a specific value
| void AsebaNative_vecmax | ( | AsebaVMState * | vm | ) |
Function to take the element by element maximum
| void AsebaNative_vecmin | ( | AsebaVMState * | vm | ) |
Function to take the element by element minimum
| void AsebaNative_vecmul | ( | AsebaVMState * | vm | ) |
Function to multiply two vectors elements by elements
| void AsebaNative_vecnonzerosequence | ( | AsebaVMState * | vm | ) |
Function to get the middle index of the largest sequence of non-zero elements
| void AsebaNative_vecstat | ( | AsebaVMState * | vm | ) |
Function to perform statistics on a vector
| void AsebaNative_vecsub | ( | AsebaVMState * | vm | ) |
Function to substract two vectors
| void AsebaNativeFunction | ( | AsebaVMState * | vm, | |
| uint16 | id | |||
| ) |
Called by AsebaStep to perform a native function call.
Definition at line 35 of file LocalVirtualMachine.cpp.
| static sint16 AsebaNativePopArg | ( | AsebaVMState * | vm | ) | [inline, static] |
| void AsebaPutVmToSleep | ( | AsebaVMState * | vm | ) |
Called by AsebaVMDebugMessage when VM must put to node in deep sleep. Write an empty function to leave feature unsupported
Definition at line 921 of file challenge.cpp.
| void AsebaResetIntoBootloader | ( | AsebaVMState * | vm | ) |
Called by AsebaVMDebugMessage when VM must restart the node and enter to the bootloader, write an empty function to leave feature unsupported
Definition at line 976 of file challenge.cpp.
| void AsebaSendDescription | ( | AsebaVMState * | vm | ) |
Called by AsebaVMDebugMessage when VM must send its description on the network.
Definition at line 97 of file vm-buffer.c.
| void AsebaSendMessage | ( | AsebaVMState * | vm, | |
| uint16 | id, | |||
| void * | data, | |||
| uint16 | size | |||
| ) |
Called by AsebaStep if there is a message (not an user event) to send. size is given in number of bytes.
Definition at line 71 of file vm-buffer.c.
| void AsebaSendVariables | ( | AsebaVMState * | vm, | |
| uint16 | start, | |||
| uint16 | length | |||
| ) |
Called by AsebaVMDebugMessage when some variables must be sent efficiently
Definition at line 84 of file vm-buffer.c.
| uint16 AsebaVMCheckBreakpoint | ( | AsebaVMState * | vm | ) |
| uint16 AsebaVMClearBreakpoint | ( | AsebaVMState * | vm, | |
| uint16 | pc | |||
| ) |
| void AsebaVMClearBreakpoints | ( | AsebaVMState * | vm | ) |
| void AsebaVMDebugMessage | ( | AsebaVMState * | vm, | |
| uint16 | id, | |||
| uint16 * | data, | |||
| uint16 | dataLength | |||
| ) |
Execute a debug action from a debug message. dataLength is given in number of uint16.
| static sint16 AsebaVMDoBinaryOperation | ( | AsebaVMState * | vm, | |
| sint16 | valueOne, | |||
| sint16 | valueTwo, | |||
| uint16 | op | |||
| ) | [static] |
| static sint16 AsebaVMDoUnaryOperation | ( | AsebaVMState * | vm, | |
| sint16 | value, | |||
| uint16 | op | |||
| ) | [static] |
| void AsebaVMEmitNodeSpecificError | ( | AsebaVMState * | vm, | |
| const char * | message | |||
| ) |
Can be called by glue code (including native functions), to stop vm and emit a node specific error
| uint16 AsebaVMGetEventAddress | ( | AsebaVMState * | vm, | |
| uint16 | event | |||
| ) |
Return the starting address of an event, or 0 if the event is not handled.
| void AsebaVMInit | ( | AsebaVMState * | vm | ) |
Setup the execution status of the VM. This is not sufficient to have a working VM. nodeId and bytecode, variables, and stack along with their sizes must be set outside this function. The content of the variable array is zeroed by this function.
| uint16 AsebaVMRun | ( | AsebaVMState * | vm, | |
| uint16 | stepsLimit | |||
| ) |
Run the VM depending on the current execution mode. Either run or step, depending of the current mode. If stepsLimit > 0, execute at maximim stepsLimit Return 1 if anything was executed, 0 otherwise.
| void AsebaVMSendExecutionStateChanged | ( | AsebaVMState * | vm | ) |
| uint8 AsebaVMSetBreakpoint | ( | AsebaVMState * | vm, | |
| uint16 | pc | |||
| ) |
| uint16 AsebaVMSetupEvent | ( | AsebaVMState * | vm, | |
| uint16 | event | |||
| ) |
Setup VM to execute an event. If event is not handled, VM is not ready for run. Return the starting address of the event, or 0 if the event is not handled.
| uint16 AsebaVMShouldDropPacket | ( | AsebaVMState * | vm, | |
| uint16 | source, | |||
| const uint8 * | data | |||
| ) |
Return non-zero if VM will ignore the packet, 0 otherwise
| void AsebaVMStep | ( | AsebaVMState * | vm | ) |
| void AsebaWriteBytecode | ( | AsebaVMState * | vm | ) |
Called by AsebaVMDebugMessage when VM must write its bytecode to flash, write an empty function to leave feature unsupported
Definition at line 972 of file challenge.cpp.
const sint16 aseba_atan_table[20 *8+1] = { 652, 735, 816, 896, 977, 1058, 1139, 1218, 1300, 1459, 1620, 1777, 1935, 2093, 2250, 2403, 2556, 2868, 3164, 3458, 3748, 4029, 4307, 4578, 4839, 5359, 5836, 6290, 6720, 7126, 7507, 7861, 8203, 8825, 9357, 9839, 10260, 10640, 10976, 11281, 11557, 12037, 12425, 12755, 13036, 13277, 13486, 13671, 13837, 14112, 14331, 14514, 14666, 14796, 14907, 15003, 15091, 15235, 15348, 15441, 15519, 15585, 15642, 15691, 15736, 15808, 15865, 15912, 15951, 15984, 16013, 16037, 16060, 16096, 16125, 16148, 16168, 16184, 16199, 16211, 16222, 16240, 16255, 16266, 16276, 16284, 16292, 16298, 16303, 16312, 16320, 16325, 16331, 16334, 16338, 16341, 16344, 16348, 16352, 16355, 16357, 16360, 16361, 16363, 16364, 16366, 16369, 16369, 16371, 16372, 16373, 16373, 16375, 16375, 16377, 16376, 16378, 16378, 16378, 16379, 16379, 16380, 16380, 16380, 16382, 16381, 16381, 16381, 16382, 16382, 16382, 16382, 16382, 16382, 16384, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384 } [static] |
const sint16 aseba_sin_table[128+1] = {0, 403, 804, 1207, 1608, 2010, 2411, 2812, 3212, 3612, 4011, 4411, 4808, 5206, 5603, 5998, 6393, 6787, 7180, 7572, 7962, 8352, 8740, 9127, 9513, 9896, 10279, 10660, 11040, 11417, 11794, 12167, 12540, 12911, 13279, 13646, 14010, 14373, 14733, 15091, 15447, 15801, 16151, 16500, 16846, 17190, 17531, 17869, 18205, 18538, 18868, 19196, 19520, 19842, 20160, 20476, 20788, 21097, 21403, 21706, 22006, 22302, 22595, 22884, 23171, 23453, 23732, 24008, 24279, 24548, 24812, 25073, 25330, 25583, 25833, 26078, 26320, 26557, 26791, 27020, 27246, 27467, 27684, 27897, 28106, 28311, 28511, 28707, 28899, 29086, 29269, 29448, 29622, 29792, 29957, 30117, 30274, 30425, 30572, 30715, 30852, 30985, 31114, 31238, 31357, 31471, 31581, 31686, 31786, 31881, 31972, 32057, 32138, 32215, 32285, 32352, 32413, 32470, 32521, 32569, 32610, 32647, 32679, 32706, 32728, 32746, 32758, 32766, 32767, } [static] |
{
"math.nzseq",
"write to dest the middle index of the largest sequence of non-zero elements from src, -1 if not found or if smaller than minLength",
{
{ 1, "dest" },
{ -1, "src" },
{ 1, "minLength" },
{ 0, 0 }
}
}
Description of AsebaNative_vecnonzerosequence