From 291491fbb34f76bbcaf2e773eac20856c273f010 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Wed, 19 Nov 2014 08:03:54 -0600 Subject: [PATCH] auto-sync --- firmware/console/tunerstudio/tunerstudio.cpp | 3 ++- firmware/rusefi.cpp | 27 +++++++++++++------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/firmware/console/tunerstudio/tunerstudio.cpp b/firmware/console/tunerstudio/tunerstudio.cpp index efbbe456ab..a55ff9bbad 100644 --- a/firmware/console/tunerstudio/tunerstudio.cpp +++ b/firmware/console/tunerstudio/tunerstudio.cpp @@ -93,7 +93,8 @@ static int ts_serail_ready(void) { #endif } -static THD_WORKING_AREA(TS_WORKING_AREA, UTILITY_THREAD_STACK_SIZE); +// this thread wants a bit extra stack +static THD_WORKING_AREA(TS_WORKING_AREA, UTILITY_THREAD_STACK_SIZE + 200); static int tsCounter = 0; diff --git a/firmware/rusefi.cpp b/firmware/rusefi.cpp index a7452a5137..4193a56752 100644 --- a/firmware/rusefi.cpp +++ b/firmware/rusefi.cpp @@ -131,10 +131,11 @@ static bool hasFirmwareErrorFlag = FALSE; extern engine_configuration_s *engineConfiguration; extern board_configuration_s *boardConfiguration; extern engine_configuration2_s *engineConfiguration2; -EXTERN_ENGINE; +EXTERN_ENGINE +; char *getFirmwareError(void) { - return (char*)errorMessageBuffer; + return (char*) errorMessageBuffer; } void runRusEfi(void) { @@ -145,7 +146,6 @@ void runRusEfi(void) { engine->engineConfiguration2 = engineConfiguration2; engineConfiguration2->engineConfiguration = engineConfiguration; - initErrorHandling(); /** @@ -243,13 +243,22 @@ void firmwareError(const char *fmt, ...) { setOutputPinValue(LED_ERROR, 1); turnAllPinsOff(); hasFirmwareErrorFlag = TRUE; - firmwareErrorMessageStream.eos = 0; // reset - va_list ap; - va_start(ap, fmt); - chvprintf((BaseSequentialStream *) &firmwareErrorMessageStream, fmt, ap); - va_end(ap); + if (indexOf(fmt, '%') == -1) { + /** + * in case of simple error message let's reduce stack usage + * because chvprintf might be causing an error + */ + strcpy((char*)errorMessageBuffer, fmt); - firmwareErrorMessageStream.buffer[firmwareErrorMessageStream.eos] = 0; // need to terminate explicitly + } else { + firmwareErrorMessageStream.eos = 0; // reset + va_list ap; + va_start(ap, fmt); + chvprintf((BaseSequentialStream *) &firmwareErrorMessageStream, fmt, ap); + va_end(ap); + + firmwareErrorMessageStream.buffer[firmwareErrorMessageStream.eos] = 0; // need to terminate explicitly + } } int getRusEfiVersion(void) {