@@ -111,7 +111,7 @@ osThreadId g_mpTaskHandle;
111111#pragma GCC diagnostic ignored "-Wwrite-strings"
112112#endif
113113
114- osThreadDef (g_mpTask, mainLoop, osPriorityNormal, 0 , 2048 );
114+ osThreadDef (g_mpTask, mainLoop, osPriorityNormal, 0 , 4096 );
115115
116116#if defined(EEZ_PLATFORM_STM32)
117117#pragma GCC diagnostic pop
@@ -233,34 +233,31 @@ void oneIter() {
233233 if (event.status == osEventMessage) {
234234 switch (event.value .v ) {
235235 case QUEUE_MESSAGE_START_SCRIPT:
236-
237- // Initialized stack limit
238- // mp_stack_set_limit(40000 * (BYTES_PER_WORD / 4));
239-
240- // Initialize heap
241-
242- // volatile int stackTop;
243- // mp_stack_set_top((void *)(&stackTop));
244- // mp_stack_set_limit(1024);
245-
246- gc_init (g_scriptSource + g_scriptSourceLength, MP_BUFFER + MP_BUFFER_SIZE);
247-
248- mp_init ();
236+ static bool g_initialized = false ;
237+ if (!g_initialized) {
238+ volatile char dummy;
239+ g_initialized = true ;
240+ mp_stack_set_top ((void *)&dummy);
241+ gc_init (g_scriptSource + g_scriptSourceLength, MP_BUFFER + MP_BUFFER_SIZE - 32768 - 1024 );
242+ mp_init ();
243+ }
249244
250245 nlr_buf_t nlr;
251246 if (nlr_push (&nlr) == 0 ) {
252247 mp_lexer_t *lex = mp_lexer_new_from_str_len (MP_QSTR__lt_stdin_gt_, g_scriptSource, g_scriptSourceLength, 0 );
253248 qstr source_name = lex->source_name ;
254249 mp_parse_tree_t parse_tree = mp_parse (lex, MP_PARSE_FILE_INPUT);
255- mp_obj_t module_fun = mp_compile (&parse_tree, source_name, true );
250+ mp_obj_t module_fun = mp_compile (&parse_tree, source_name, MP_EMIT_OPT_NONE, true );
256251 mp_call_function_0 (module_fun);
257252 nlr_pop ();
258253 } else {
259254 // uncaught exception
260255 mp_obj_print_exception (&mp_plat_print, (mp_obj_t )nlr.ret_val );
261256 }
262257
263- mp_deinit ();
258+ // gc_sweep_all();
259+
260+ // mp_deinit();
264261
265262 break ;
266263 }
@@ -328,29 +325,33 @@ void onQueueMessage(uint32_t type, uint32_t param) {
328325}
329326
330327bool scpi (const char *commandOrQueryText, const char **resultText, size_t *resultTextLen) {
331- g_commandOrQueryText = commandOrQueryText;
332328 g_scpiDataLen = 0 ;
333329
334- osMessagePut (scpi::g_scpiMessageQueueId, SCPI_QUEUE_MP_MESSAGE (EXECUTE_SCPI, 0 ), osWaitForever);
335-
336- while (true ) {
337- osEvent event = osMessageGet (g_mpMessageQueueId, osWaitForever);
338- if (event.status == osEventMessage) {
339- switch (event.value .v ) {
340- case QUEUE_MESSAGE_SCPI_RESULT:
341- *resultText = g_scpiData;
342- *resultTextLen = g_scpiDataLen;
343- return true ;
344- }
345- }
346- }
330+ // g_commandOrQueryText = commandOrQueryText;
331+ // osMessagePut(scpi::g_scpiMessageQueueId, SCPI_QUEUE_MP_MESSAGE(EXECUTE_SCPI, 0), osWaitForever);
332+
333+ // while (true) {
334+ // osEvent event = osMessageGet(g_mpMessageQueueId, osWaitForever);
335+ // if (event.status == osEventMessage) {
336+ // switch (event.value.v) {
337+ // case QUEUE_MESSAGE_SCPI_RESULT:
338+ // *resultText = g_scpiData;
339+ // *resultTextLen = g_scpiDataLen;
340+ // return true;
341+ // }
342+ // }
343+ // }
347344
348- // input(g_scpiContext, (const char *)commandOrQueryText, strlen(commandOrQueryText));
349- // input(g_scpiContext, "\r\n", 2);
345+ input (g_scpiContext, (const char *)commandOrQueryText, strlen (commandOrQueryText));
346+ input (g_scpiContext, " \r\n " , 2 );
350347
351- // *resultText = g_scpiData;
352- // *resultTextLen = g_scpiDataLen;
353- // return true;
348+ if (g_scpiDataLen >= 2 && g_scpiData[g_scpiDataLen - 2 ] == ' \r ' && g_scpiData[g_scpiDataLen - 1 ] == ' \n ' ) {
349+ g_scpiDataLen -= 2 ;
350+ }
351+
352+ *resultText = g_scpiData;
353+ *resultTextLen = g_scpiDataLen;
354+ return true ;
354355}
355356
356357} // mp
0 commit comments