Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ICE-Application/src/Utilities/v7_execute.cpp@0:61364762ee0e, 2017-01-24 (annotated)
- Committer:
- jmarkel44
- Date:
- Tue Jan 24 19:05:33 2017 +0000
- Revision:
- 0:61364762ee0e
Port from IAR to Nucleo-F412 board
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jmarkel44 | 0:61364762ee0e | 1 | #include <stdio.h> |
jmarkel44 | 0:61364762ee0e | 2 | #include "v7_execute.h" |
jmarkel44 | 0:61364762ee0e | 3 | #include "utilities.h" |
jmarkel44 | 0:61364762ee0e | 4 | #include "rtos.h" |
jmarkel44 | 0:61364762ee0e | 5 | |
jmarkel44 | 0:61364762ee0e | 6 | #ifdef EXECUTE_SCRIPT |
jmarkel44 | 0:61364762ee0e | 7 | |
jmarkel44 | 0:61364762ee0e | 8 | struct v7 *v7; |
jmarkel44 | 0:61364762ee0e | 9 | Mutex v7_mutex; |
jmarkel44 | 0:61364762ee0e | 10 | |
jmarkel44 | 0:61364762ee0e | 11 | void v7_Create_Engine(void) |
jmarkel44 | 0:61364762ee0e | 12 | { |
jmarkel44 | 0:61364762ee0e | 13 | v7 = v7_create(); |
jmarkel44 | 0:61364762ee0e | 14 | v7_Register_C_Calls(v7); |
jmarkel44 | 0:61364762ee0e | 15 | } |
jmarkel44 | 0:61364762ee0e | 16 | |
jmarkel44 | 0:61364762ee0e | 17 | void v7_Load_Script(const char * scriptString) |
jmarkel44 | 0:61364762ee0e | 18 | { |
jmarkel44 | 0:61364762ee0e | 19 | enum v7_err rcode; |
jmarkel44 | 0:61364762ee0e | 20 | v7_val_t result; |
jmarkel44 | 0:61364762ee0e | 21 | |
jmarkel44 | 0:61364762ee0e | 22 | osStatus mutex_ret = v7_mutex.lock(); |
jmarkel44 | 0:61364762ee0e | 23 | if( mutex_ret != osOK ) printf("%s:%d: did not lock mutex, ret=0x%x\r\n", __func__, __LINE__, mutex_ret); |
jmarkel44 | 0:61364762ee0e | 24 | rcode = v7_exec(v7, scriptString, &result); |
jmarkel44 | 0:61364762ee0e | 25 | mutex_ret = v7_mutex.unlock(); |
jmarkel44 | 0:61364762ee0e | 26 | if( mutex_ret != osOK ) printf("%s:%d: did not unlock mutex, ret=0x%x\r\n", __func__, __LINE__, mutex_ret); |
jmarkel44 | 0:61364762ee0e | 27 | if( rcode != V7_OK ) |
jmarkel44 | 0:61364762ee0e | 28 | { |
jmarkel44 | 0:61364762ee0e | 29 | printf("%s:%d: Failed to load script: %s (len=%d), ret=%d\r\n", __func__, __LINE__, scriptString, strlen(scriptString), rcode); |
jmarkel44 | 0:61364762ee0e | 30 | } |
jmarkel44 | 0:61364762ee0e | 31 | } |
jmarkel44 | 0:61364762ee0e | 32 | |
jmarkel44 | 0:61364762ee0e | 33 | void v7_Execute_Script( std::string Command, std::string argv[NUM_SCRIPT_ARGS] ) |
jmarkel44 | 0:61364762ee0e | 34 | { |
jmarkel44 | 0:61364762ee0e | 35 | v7_val_t func, result, args; |
jmarkel44 | 0:61364762ee0e | 36 | double argv_array[NUM_SCRIPT_ARGS]; |
jmarkel44 | 0:61364762ee0e | 37 | |
jmarkel44 | 0:61364762ee0e | 38 | if( Command.size() == 0 ) { |
jmarkel44 | 0:61364762ee0e | 39 | return; |
jmarkel44 | 0:61364762ee0e | 40 | } |
jmarkel44 | 0:61364762ee0e | 41 | // printf("\r%s\r\n", Util_getHeapData().c_str()); |
jmarkel44 | 0:61364762ee0e | 42 | |
jmarkel44 | 0:61364762ee0e | 43 | memset( argv_array, 0, (sizeof(double) * NUM_SCRIPT_ARGS)); |
jmarkel44 | 0:61364762ee0e | 44 | for( int i=0; i<NUM_SCRIPT_ARGS; i++ ) { |
jmarkel44 | 0:61364762ee0e | 45 | if( argv[i].size() != 0 ) { |
jmarkel44 | 0:61364762ee0e | 46 | argv_array[i] = RegisterValueMap[argv[i]].float_value; |
jmarkel44 | 0:61364762ee0e | 47 | } |
jmarkel44 | 0:61364762ee0e | 48 | } |
jmarkel44 | 0:61364762ee0e | 49 | |
jmarkel44 | 0:61364762ee0e | 50 | // printf("Command.size=%d, Command=%s(%s=%2.2f,%s=%2.2f,%s=%2.2f,%s=%2.2f)\r\n", Command.size() ,Command.c_str(), argv[0].c_str(), argv_array[0], argv[1].c_str(), argv_array[1], argv[2].c_str(), argv_array[2], argv[3].c_str(), argv_array[3]); |
jmarkel44 | 0:61364762ee0e | 51 | |
jmarkel44 | 0:61364762ee0e | 52 | osStatus mutex_ret = v7_mutex.lock(); |
jmarkel44 | 0:61364762ee0e | 53 | if( mutex_ret != osOK ) printf("%s:%d: did not lock mutex, ret=0x%x\r\n", __func__, __LINE__, mutex_ret); |
jmarkel44 | 0:61364762ee0e | 54 | |
jmarkel44 | 0:61364762ee0e | 55 | func = v7_get(v7, v7_get_global(v7), Command.c_str(), Command.size()); |
jmarkel44 | 0:61364762ee0e | 56 | |
jmarkel44 | 0:61364762ee0e | 57 | args = v7_mk_array(v7); |
jmarkel44 | 0:61364762ee0e | 58 | for( int i=0; i<NUM_SCRIPT_ARGS; i++ ) { |
jmarkel44 | 0:61364762ee0e | 59 | if( argv[i].size() != 0 ) { |
jmarkel44 | 0:61364762ee0e | 60 | // printf("Pushing %s\r\n", argv[i].c_str()); |
jmarkel44 | 0:61364762ee0e | 61 | v7_array_push(v7, args, v7_mk_string(v7, argv[i].c_str(), argv[i].size(), false)); |
jmarkel44 | 0:61364762ee0e | 62 | } |
jmarkel44 | 0:61364762ee0e | 63 | } |
jmarkel44 | 0:61364762ee0e | 64 | |
jmarkel44 | 0:61364762ee0e | 65 | if (v7_apply(v7, func, V7_UNDEFINED, args, &result) == V7_OK) { |
jmarkel44 | 0:61364762ee0e | 66 | // printf("Result: %g\r\n", v7_get_double(v7, result)); |
jmarkel44 | 0:61364762ee0e | 67 | } else { |
jmarkel44 | 0:61364762ee0e | 68 | printf("Error while calling %s\r\n", Command.c_str()); |
jmarkel44 | 0:61364762ee0e | 69 | } |
jmarkel44 | 0:61364762ee0e | 70 | |
jmarkel44 | 0:61364762ee0e | 71 | mutex_ret = v7_mutex.unlock(); |
jmarkel44 | 0:61364762ee0e | 72 | if( mutex_ret != osOK ) printf("%s:%d: did not unlock mutex, ret=0x%x\r\n", __func__, __LINE__, mutex_ret); |
jmarkel44 | 0:61364762ee0e | 73 | } |
jmarkel44 | 0:61364762ee0e | 74 | #endif |